unity 智慧园区系列(二)POI通过添加动画和插值计算获得平滑的移动效果

要在Unity中添加动画和插值计算,可以使用Unity的动画系统和插值函数。下面是一个示例代码,演示了如何在相机切换POI点位时添加动画和插值计算:
 

using UnityEngine;

public class SmartParkCameraController : MonoBehaviour
{
    public Transform[] poiPoints; // POI点位数组
    public float transitionSpeed = 5f; // 相机移动的速度

    private Transform cameraTransform;
    private Transform currentPoint;
    private int currentPointIndex = 0;
    private bool transition = false;
    private float transitionTime = 0f;

    private void Start()
    {
        cameraTransform = Camera.main.transform;

        if (poiPoints.Length > 0)
        {
            currentPoint = poiPoints[currentPointIndex];
        }
    }

    private void Update()
    {
        // 点击鼠标左键切换到下一个POI点位
        if (Input.GetMouseButtonDown(0))
        {
            currentPointIndex = (currentPointIndex + 1) % poiPoints.Length;
            currentPoint = poiPoints[currentPointIndex];
            transition = true;
            transitionTime = 0f;
        }

        // 相机平滑移动到目标点位
        if (transition)
        {
            Vector3 startCameraPosition = cameraTransform.position;
            Quaternion startCameraRotation = cameraTransform.rotation;

            Vector3 targetPosition = currentPoint.position;
            Quaternion targetRotation = currentPoint.rotation;

            transitionTime += Time.deltaTime;

            // 使用插值函数计算平滑过渡的位置和旋转
            float t = Mathf.Clamp01(transitionTime / transitionSpeed);
            cameraTransform.position = Vector3.Lerp(startCameraPosition, targetPosition, t);
            cameraTransform.rotation = Quaternion.Slerp(startCameraRotation, targetRotation, t);

            // 当相机接近目标点位时,停止过渡效果
            if (Vector3.Distance(cameraTransform.position, targetPosition) < 0.1f)
            {
                transition = false;
            }
        }
    }
}

在这个示例代码中,我们添加了一个transitionTime变量来记录过渡的时间。当点击右键切换目标点位时,我们将transitionTime重置为0,并使用插值函数来计算位置和旋转的插值比例t。

通过使用Mathf.Clamp01函数将t值限制在0到1之间,我们得到一个平滑的过渡效果,其中0表示最初的位置和旋转,1表示目标位置和旋转。

在每个帧上,我们按照插值比例t计算并应用相机的过渡位置和旋转。当过渡时间超过过渡速度时,我们停止过渡效果,并将transition设置为false。

通过这种方式,你可以在切换POI点位时,通过动画和插值计算实现平滑移动相机到目标位置和旋转的效果。

你可以根据需要调整过渡速度、插值函数和其他动画参数,以实现符合你项目需求的动画效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值