繁体   English   中英

如何在Unity中平稳旋转相机?

[英]How to rotate the camera smoothly in Unity?

我有一个3D汽车游戏,摄像头从顶部指向底部。 汽车行驶时,我需要照相机跟随它。 我知道如何进行位置跟随,但是我不知道如何平稳地进行与汽车相同的旋转。 我只需要更改y轴。 x = 90z = 0一直。 汽车也仅在y轴上旋转。

public float interpVelocity;
public float minDistance;
public float followDistance;
public GameObject target;
public Vector3 offset;
Vector3 targetPos;

// Use this for initialization
void Start()
{
    targetPos = transform.position;
}

// Update is called once per frame
void FixedUpdate()
{
    if (target)
    {
        Vector3 posNoZ = transform.position;
        posNoZ.z = target.transform.position.z;

        Vector3 targetDirectionZ = (target.transform.position - posNoZ);

        interpVelocity = targetDirectionZ.magnitude * 5f;

        targetPos = transform.position + (targetDirectionZ.normalized * interpVelocity * Time.deltaTime);

        transform.position = Vector3.Lerp(transform.position, targetPos + offset, 0.25f);


        Vector3 posNoX = transform.position;
        posNoX.x = target.transform.position.x;

        Vector3 targetDirectionX = (target.transform.position - posNoX);

        interpVelocity = targetDirectionX.magnitude * 5f;

        targetPos = transform.position + (targetDirectionX.normalized * interpVelocity * Time.deltaTime);

        transform.position = Vector3.Lerp(transform.position, targetPos + offset, 0.25f);
    }
}

也许Mathf.Lerp在您的情况下会有所帮助。 角度的Lerp与Vector的lerp相同,但在环绕360度时也要记住正确的值。 如果要始终保持x轴和z轴相同,则角度计算将如下所示:

var currentAngle = new Vector3( 90.0f,
         Mathf.LerpAngle(currentAngle.y, targetAngle.y, Time.deltaTime), 0.0f);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM