Unity 2D 角色移动
Unity 2D Character Movement
对于我要构建的游戏,我希望我的玩家对象在按住 'W/A/S/D' 时移动。
例如,如果我想向右移动,我必须按住 'D'。
我试过使用 Rigidbody2D.AddForce,但我不喜欢它产生的运动感。
我正在寻找即时移动和停止,而不是任何 acceleration/decceleration。
有什么想法吗?
谢谢!!!
亚历克斯
你可以尝试这样的事情。
在更新方法中,使用以下代码从 WASD 键获取移动值。
MovementInputValue = Input.GetAxis ("VerticalAxis_name");
TurnInputValue = Input.GetAxis ("HorizontalAxis_name");
然后,在FixedUpdate方法中,使用以下代码移动对象。
// For moving
Vector3 movement = transform.forward * MovementInputValue * m_Speed * Time.deltaTime;
rigidbody.MovePosition(rigidbody.position + movement);
//For turning
float turn = TurnInputValue * m_TurnSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler (0f, turn, 0f);
rigidbody.MoveRotation (rigidbody.rotation * turnRotation);
此代码是为 3D 运动编写的,但您可以轻松将其更改为 2D
对于我要构建的游戏,我希望我的玩家对象在按住 'W/A/S/D' 时移动。
例如,如果我想向右移动,我必须按住 'D'。
我试过使用 Rigidbody2D.AddForce,但我不喜欢它产生的运动感。
我正在寻找即时移动和停止,而不是任何 acceleration/decceleration。
有什么想法吗?
谢谢!!! 亚历克斯
你可以尝试这样的事情。 在更新方法中,使用以下代码从 WASD 键获取移动值。
MovementInputValue = Input.GetAxis ("VerticalAxis_name");
TurnInputValue = Input.GetAxis ("HorizontalAxis_name");
然后,在FixedUpdate方法中,使用以下代码移动对象。
// For moving
Vector3 movement = transform.forward * MovementInputValue * m_Speed * Time.deltaTime;
rigidbody.MovePosition(rigidbody.position + movement);
//For turning
float turn = TurnInputValue * m_TurnSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler (0f, turn, 0f);
rigidbody.MoveRotation (rigidbody.rotation * turnRotation);
此代码是为 3D 运动编写的,但您可以轻松将其更改为 2D