Unity第一视角MouseLook源码分析

本文深入分析Unity中的第一视角MouseLook源码,结合四元数的数学概念解释代码原理。通过导入Characters资源,重点讨论MouseLook.cs中的ClampRotationAroundXAxis方法,探讨四元数在限制旋转范围中的应用,特别是如何使用四元数表示旋转角度。
摘要由CSDN通过智能技术生成

摘要:

本文对Unity第一视角MouseLook源码继续深入分析,并引用一些四元数的数学概念来阐述代码工作原理。

导入资源:

在Project栏导入Characters,其中里面包含FirstPersonCharacters相关资源。


源码文件:

Characters->FirstPersonCharacters->script->MouseLook.cs


源码附注释:

public class MouseLook
    {
        public float XSensitivity = 2f;//X灵敏度
        public float YSensitivity = 2f;//Y灵敏度
        public bool clampVerticalRotation = true;//是否夹紧视角
        public float MinimumX = -90F;//绕x轴旋转角度,低头极限
        public float MaximumX = 90F;//绕x轴旋转角度,抬头极限
        public bool smooth;//是否开启平滑视角过度
        public float smoothTime = 5f;//平滑时间


        private Quaternion m_CharacterTargetRot;//角色旋转的目标角度(角色旋转会带动相机旋转)
        private Quaternion m_CameraTargetRot;//相机旋转的目标角度(相机旋转不会带动角色旋转)


        public void Init(Transform character, Transform camera)
        {
            m_CharacterTargetRot = character.localRotation;
            m_CameraTargetRot = camera.localRotation;
        }


        public void LookRotation(Transform character, Transform camera)
        {
            float yRot = CrossPlatformInputManager.GetAxis("Mouse X") * XSensitivity;
            float xRot = CrossPlatformInputManager.GetAxis("Mouse Y") * YSensitivity;
			//请注意,mouseX转换为y轴旋转,mouseY转换为x轴旋转
            m_CharacterTargetRot *= Quaternion.Euler (0f, yRot, 0f);//左右视角
            m_CameraTargetRot *= Quaternion.Euler (-xRot, 0f, 0f);//上下视角

            if(clampVerticalRotation)//夹紧x轴旋转角度[-90,90],亦即上下视角,默认开启
                m_CameraTargetRot = ClampRotationAroundXAxis (m_CameraTargetRot);


            if(smooth)
            {   //划动视角时,是否开启平滑模式,slerp进行插值,默认关闭
                character.localRotation = Quaternion.Slerp (character.localRotation, 

m_CharacterTargetRot,
                    smoothTime * Time.deltaTime);
                camera.localRotation = Quaternion.Slerp (camera.localRotation, 

m_CameraTargetRot,
                    smoothTime * Time.deltaTime);
            }
            else
            {
                character.localRotation = m_CharacterTargetRot
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值