【发布时间】:2019-10-11 16:06:31
【问题描述】:
我正在统一开展一个小项目。这是一个自上而下的游戏,其角色由操纵杆控制。当我运行游戏时,我的角色在 z 位置开始 -90,应该是 0。但是当我将操纵杆移动到我希望它运行的方向时它工作正常,这意味着它面向它运行的方向.但是,如果我放开操纵杆,角色会在 z 位置弹回 -90,我试图弄清楚它为什么这样做并防止它发生。
我在这里寻找教程视频和一些帖子,但没有一个回答我的问题。我还尝试删除我的 Mathf.Atan2 公式中的“-90f”,但是当我这样做时,它在 z 位置上旋转了 90 度。意思是,当我将操纵杆垂直向下时,角色会向右旋转。
这是我的代码:
public class PlayerController : MonoBehaviour
{
public static PlayerController instance;
public Rigidbody2D rb;
public Joystick joystick;
private float moveSpeed = 2.5f;
Vector2 movement;
// Update is called once per frame
void Update()
{
movement.x = joystick.Horizontal;
movement.y = joystick.Vertical;
}
void FixedUpdate()
{
rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
float angle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg - 90f;
transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle));
}
我希望我的角色在游戏开始时在 z 位置从 0 开始,并且在松开操纵杆之前让角色停留并面向操纵杆的方向,而不是在 z 位置旋转回 -90 .
【问题讨论】:
-
几张显示当前和所需角色动作(带有轴)的图像将对我们有所帮助。另外,您使用的是 2D 还是 3D 物理?
-
我相信您的回弹问题是您正在根据当前运动检查和更新角度。这在您移动时有效,但在您停止时计算
Mathf.Atan2(0,0) * Mathf.Rad2Deg-90f;。然后向着旋转。 -
最好仅在自上次更新后移动或位置发生变化时才更新角度。
-
@Immersive Im 使用 2D 物理
-
@TheLazyScripter 我没有想到,我会尝试你的建议,如果有效,我会回来。