我的代码仅适用于水平移动。垂直运动不应该工作吗?我刚开始学习基本的2D统一规划:如何在Unity中使用WASD移动2D对象
public class Player : MonoBehaviour {
//These fields will be exposed to Unity so the dev can set the parameters there
[SerializeField] private float speed = 1f;
[SerializeField] private float upY;
[SerializeField] private float downY;
[SerializeField] private float leftX;
[SerializeField] private float rightX;
private Transform _transformY;
private Transform _transformX;
private Vector2 _currentPosY;
private Vector2 _currentPosX;
// Use this for initialization
void Start() {
_transformY = gameObject.GetComponent<Transform>();
_currentPosY = _transformY.position;
_transformX = gameObject.GetComponent<Transform>();
_currentPosX = _transformX.position;
}
// Update is called once per frame
void Update() {
_currentPosY = _transformY.position;
_currentPosX = _transformX.position;
float userInputV = Input.GetAxis ("Vertical");
float userInputH = Input.GetAxis ("Horizontal");
if (userInputV < 0)
_currentPosY -= new Vector2 (0, speed);
if (userInputV > 0)
_currentPosY += new Vector2 (0, speed);
if (userInputH < 0)
_currentPosX -= new Vector2 (speed, 0);
if (userInputH > 0)
_currentPosX += new Vector2 (speed, 0);
CheckBoundary();
_transformY.position = _currentPosY;
_transformX.position = _currentPosX;
}
private void CheckBoundary(){
if (_currentPosY.y < upY)
_currentPosY.y = upY;
if (_currentPosY.y > downY)
_currentPosY.y = downY;
if (_currentPosX.x < leftX)
_currentPosX.x = leftX;
if (_currentPosX.x > rightX)
_currentPosX.x = rightX;
}
}
如果我删除/注释掉_currentPosX
,然后我的垂直运动的作品它的相关代码。但是,如果我删除/注释掉_currentPosY
及其相关代码,则我的“水平”移动将起作用。
但是我怎么会遇到麻烦让他们同时工作?我想我只是想念一些东西,但我无法弄清楚,因为我只是一个初学者。
感谢谁可以给予建议。
编辑:为进一步澄清...
我编码一个简单的2D游戏,将在使用WASD键4方向移动播放器。
W = move up
A = move left
S = move down
D = move right
我的主要问题是,我可以得到两个只在一个轴工作的关键:无论是A和d正在为水平的,而W和S不工作在所有的垂直运动,反之亦然。
你能描述一下你的控制吗? WASD用于什么? – Programmer
只是在2D游戏画面(精灵)中向上,向下,向左,向右移动 – 5120bee
对象是否具有rigidbody2d? – Programmer