unity3D相机缓慢看向目标物体

本文介绍了一种改进的摄像机旋转方法用于游戏角色控制和怪物转向,通过旋转过程平滑地看向目标,适用于AI控制的角色如怪物、玩家或其他物体。通过获取目标物体与相机之间的相对法向量进行旋转,实现更流畅的转向效果。文中还对比了两种不同的转向方法,一种直接旋转,另一种使用Slerp进行缓动效果,提供了在不同场景下选择合适方法的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有的时候我们希望相机可以慢慢的转动去看向一个目标物体,官方的API里有个方法是LookAt,但是LookAt是直接看过去,少了一个旋转的过程。

    void CameraRotateToLookAt(Transform target,float rotateSpeed)
    {
        //取得目标物体相对于相机的法向量
        Vector3 normalize = Vector3.Cross(myCamera.transform.forward,target.transform.position-myCamera.transform.position);
        float angles = Vector3.Angle(myCamera.transform.position,target.transform.position);
        
        //以该法向量为轴进行旋转
        myCamera.transform.Rotate(normalize,Time.deltaTime*rotateSpeed,Space.Self);
        Debug.Log(angles);
        if(angles == 0)
        {
            rotateSpeed = 0;
        }
    }

 其实这个可以引申到很多方面,比如说怪物的AI,怪物转向Player,又或者其它的一些物体或者游戏的角色控制等。只需要替换一下myCamera即可,另外这个原理就是取得两个物体之间的相对法向量,然后相对该法向量进行旋转。不过还有一些其它办法可以实现,例如:

            Quaternion rotation = Quaternion.LookRotation(target.position - transform.position);
            transform.rotation = Quaternion.Slerp(transform.rotation,rotation,damping*Time.deltaTime);

不过这个方法并不是很准确的LookAt,还是有些差异的,但是一般情况下用起来应该是没什么问题的。而且两个方法效果差异也很大,第二种有一种缓动的感觉,第一种是直接旋转过去。

转载于:https://www.cnblogs.com/vital/p/3337137.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值