我的角色是一辆汽车,我尝试将其旋转到移动的方向,到目前为止,我成功做到了这一点,但是一旦我停止移动,角色就会翻转回开始时的方向。
我又如何才能使从侧面到对面的转弯变得平稳?
到目前为止,这是我的代码:
[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;
}
答案 0 :(得分:0)
对此我不确定,但是也许每帧都被调用的最后一行“ myRigidbody.rotation = angle”是使您的汽车重置其旋转方向的原因。 也许将其更改为“ myRigidbody.rotation * =角度”或“ myRigidbody.rotation + =角度”。
答案 1 :(得分:0)
这似乎是因为释放控件时将重置HorizontalcontrolThrow和VerticalcontrolThrow。如果将其重置为原始方向,则说明在移动之前,这两个值将保持其默认值。然后,您移动并影响旋转。但是,当您释放控件时,这些值又回到了起始值,旋转也是如此。
因此,您需要做的是尝试将HorizontalcontrolThrow和VerticalcontrolThrow与其余代码分开,仅当这两个变量中的至少一个不处于默认设置时才应激活它们(我不记得了轴功能会立即返回。)
编辑:
IF语句就足够了(一些粗略的伪代码):
Dataset
答案 2 :(得分:0)
我使用四元数旋转解决了捕捉旋转,我遇到的问题是通过以下剪辑的指南将其从3d转换为2d:youtube.com/watch?v=mKLp-2iseDc并进行了调整一切正常!