Unity - Decrease/Increase Update() 上的 "Z axis" 角轴

Unity - Decrease/Increase the "Z axis" angle axis on Update()

[看我下面的回答!感谢评论]

在不使用 "eulerAngles" 的情况下 Decrease/Increase 角度的最佳方法是什么?

根据我的"Y axis",我需要在 30 和 325 之间进行转换。

如果小于零,我们减少 "Z axis" 的值 如果我们增加 "Z axis" 的值,则更大。

我已经试过了:

if ( airPlanePlayerRigidbody2D.velocity.y < 0 ) {
         var rotationVector = airPlanePlayerTransform.rotation;
         rotationVector.z -= 2f;
         Vector3 vec = new Vector3(rotationVector.x,rotationVector.y,rotationVector.z);
         airPlanePlayerTransform.rotation = Quaternion.Euler(vec);
 }

并且:

public void Rotate(float angle)
{
    airPlanePlayerTransform.Rotate(0, 0, angle); // this rotate forever
}

提前致谢。

更新

事实上,我已经有了满足我需要的代码,但它太长了。我正在寻找一些更简单的。我想要的结果是这样的:

更流畅的动画:Smooth animation down

到目前为止,我对这里发表的评论能做的是:Without animation

我认为eulerAngeles 是一个很好的方法,我在Unity 中使用eulerAngeles 成功地实现了类似的旋转效果。你可能在使用的时候没有找到正确的方法。

我用过类似的东西:

Vector3 newRotationAngles = transform.rotation.eulerAngles;

    if (Input.GetKey(KeyCode.LeftArrow)) {

        newRotationAngles.z += 1;

    } else if (Input.GetKey(KeyCode.RightArrow)) {

        newRotationAngles.z -= 1;
    }

    transform.rotation = Quaternion.Euler (newRotationAngles);

输出:当你按下left/right方向键时,游戏对象会旋转,但它并不总是旋转。希望这对您有所帮助。

你想要这样的东西:

public float maxAngle = 325f; // Max Angle for Z Axis
public float minAngle = 30f; // Min Angle for Z Axis
public float rotationDelta = 1f; // you can control your rotation speed using this
float tempAngle;
void Update() 
{
    // If AirPlane is rising, velocity in y is greater than 0
    if(rigidbody2D.velocity.y > 0)
    {
        tempAngle = Mathf.LerpAngle(transform.eulerAngles.z, maxAngle, Time.time * rotationDelta);
    }
    // If AirPlane is falling, velocity in y is less than 0
    else if(rigidbody2D.velocity.y < 0)
    {
        tempAngle = Mathf.LerpAngle(transform.eulerAngles.z, minAngle, Time.time * rotationDelta);
    }
    // If AirPlane is going straight in horizontal.
    else
    {
        tempAngle = 0;
    }
    transform.eulerAngles = new Vector3(0, 0, tempAngle);
}

研究主题,我设法得到了结果。感谢您的答复。

if (airPlanePlayerRigidbody2D.velocity.y < 0) { //falling
       var myNewQuaternion = Quaternion.Euler (new Vector3 (0, 0, -30));
       var myQuaternion = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
       transform.rotation = Quaternion.Slerp (myQuaternion , myNewQuaternion ,  speed );
}
else if (airPlanePlayerRigidbody2D.velocity.y > 0) { // rising
       var myNewQuaternion = Quaternion.Euler (new Vector3 (0, 0, 30));
       var myQuaternion = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
       transform.rotation = Quaternion.Slerp (myQuaternion , myNewQuaternion ,  speed );
}