玩家停止移动角色方向重置[Unity 2D]

时间:2020-06-17 19:51:02

标签: unity3d rotation direction

我的角色是一辆汽车,我尝试将其旋转到移动的方向,到目前为止,我成功做到了这一点,但是一旦我停止移动,角色就会翻转回开始时的方向。

我又如何才能使从侧面到对面的转弯变得平稳?

到目前为止,这是我的代码:

    [SerializeField] float driveSpeed = 5f;
 //state
 Rigidbody2D myRigidbody;
 // Start is called before the first frame update
 void Start()
 {
     myRigidbody = GetComponent<Rigidbody2D>();
 }
 // Update is called once per frame
 void Update()
 {
     Move();        
 }

 private void Move()
 {
     //Control of velocity of the car
     float HorizontalcontrolThrow = CrossPlatformInputManager.GetAxis("Horizontal"); // Value between -1 to 1
     float VerticalcontrolThrow = CrossPlatformInputManager.GetAxis("Vertical"); // Value between -1 to 1
     Vector2 playerVelocity = new Vector2(HorizontalcontrolThrow * driveSpeed, VerticalcontrolThrow * driveSpeed);
     myRigidbody.velocity =playerVelocity;


     **//Direction of the car**
     Vector2 direction = new Vector2(HorizontalcontrolThrow, VerticalcontrolThrow);
     float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
     myRigidbody.rotation = angle;
 }

3 个答案:

答案 0 :(得分:0)

对此我不确定,但是也许每帧都被调用的最后一行“ myRigidbody.rotation = angle”是使您的汽车重置其旋转方向的原因。 也许将其更改为“ myRigidbody.rotation * =角度”或“ myRigidbody.rotation + =角度”。

答案 1 :(得分:0)

这似乎是因为释放控件时将重置Horizo​​ntalcontrolThrow和VerticalcontrolThrow。如果将其重置为原始方向,则说明在移动之前,这两个值将保持其默认值。然后,您移动并影响旋转。但是,当您释放控件时,这些值又回到了起始值,旋转也是如此。

因此,您需要做的是尝试将Horizo​​ntalcontrolThrow和VerticalcontrolThrow与其余代码分开,仅当这两个变量中的至少一个不处于默认设置时才应激活它们(我不记得了轴功能会立即返回。)

编辑:

IF语句就足够了(一些粗略的伪代码):

Dataset

答案 2 :(得分:0)

我使用四元数旋转解决了捕捉旋转,我遇到的问题是通过以下剪辑的指南将其从3d转换为2d:youtube.com/watch?v=mKLp-2iseDc并进行了调整一切正常!