unity标准资源包FirstPersonController的分析

1.鼠标转动

基类MouseLook,负责处理鼠标转向和准星是否锁定,这个比较简单

using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

namespace UnityStandardAssets.Characters.FirstPerson
{
    [Serializable]
    public class MouseLook
    {
        public float XSensitivity = 2f;    //x轴灵敏度
        public float YSensitivity = 2f;    //y轴灵敏地
        public bool clampVerticalRotation = true;   //是否限制俯仰角
        public float MinimumX = -90F;   //最小俯角
        public float MaximumX = 90F;    //最大仰角
        public bool smooth;       
        public float smoothTime = 5f;
        public bool lockCursor = true;   //锁定准星


        private Quaternion m_CharacterTargetRot;  //这个是角色的属性
        private Quaternion m_CameraTargetRot;     //这个是摄像机的属性,这里有必要说下,
        //这里鼠标控制的横向转动是角色转,角色带动摄像机转,但竖着转动是摄像机转,角色不动
        //这样就可以避免出现角色扭曲的情况
        private bool m_cursorIsLocked = true;

        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;//x和y轴的转动角度

            m_CharacterTargetRot *= Quaternion.Euler (0f, yRot, 0f);   //数学关系,不懂= =
            m_CameraTargetRot *= Quaternion.Euler (-xRot, 0f, 0f);

            if(clampVerticalRotation)
                m_CameraTargetRot = ClampRotationAroundXAxis (m_CameraTargetRot);  //得到俯仰角

            if(smooth)   //平滑鼠标,第一人称大部分都不需要,所以不看这个
            {
                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;   //更新坐标,发现这里更新的是两部分,也就是角色和摄像机
                camera.localRotation = m_CameraTargetRot;
            }

            UpdateCursorLock();    //处理准星是否锁定的问题
        }

        public void SetCursorLock(bool value)
        {
            lockCursor = value;
            if(!lockCursor)
            {//we force unlock the cursor if the user disable the cursor locking helper
                Cursor.lockState = CursorLockMode.None;
                Cursor.visible = true;
            }
        }

        public void UpdateCursorLock()
        {
            //if the user set "lockCursor" we check & properly lock the cursos
            if (lockCursor)
                InternalLockUpdate();
        }

        private void InternalLockUpdate()//如果要锁定准星,执行这个方法
        {
            if(Input.GetKeyUp(KeyCode.Escape))
            {
                m_cursorIsLocked = false;  //按下Esc取消锁定
            }
            else if(Input.GetMouseButtonUp(0))
            {
                m_cursorIsLocked = true;
            }

            if (m_cursorIsLocked)  //锁定
            {
                Cursor.lockState = CursorLockMode.Locked;
                Cursor.visible = false;
            }
            else if (!m_cursorIsLocked)  //取消锁定
            {
                Cursor.lockState = CursorLockMode.None;
                Cursor.visible = true;
            }
            //个人感觉这个m_cursorIsLocked没有必要.....
        }

        Quaternion ClampRotationAroundXAxis(Quaternion q)//Clamp俯仰角
        {
            q.x /= q.w;
            q.y /= q.w;
            q.z /= q.w;
            q.w = 1.0f;

            float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan (q.x);

            angleX = Mathf.Clamp (angleX, MinimumX, MaximumX);

            q.x = Mathf.Tan 
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity2018官方标准资源Unity官方提供的一套含各种高质量资源资源。它含了3D模型、动画、材质、纹理、粒子效果、音频等各种资源,可以在游戏开发过程中使用。 首先,Unity2018官方标准资源提供了大量的3D模型,这些模型可以用于创建场景中的角色、道具、环境等。模型都经过精心设计和优化,质量较高,有助于提升游戏的视觉效果。 其次,官方资源中还含了各种动画资源括角色的动作、场景的特效等。这些动画资源可以直接在游戏中使用,也可以作为学习和参考的素材,帮助开发者提升动画技能。 此外,官方资源中还提供了各种材质和纹理资源,可以用于创建游戏中的各种物体和表面效果。这些资源经过优化和品质保证,可以节省开发者的时间和精力。 另外,标准资源含了一系列的粒子效果,可以用于制作游戏中的特殊效果,诸如爆炸、火焰、雨等。这些效果可以增添游戏的动感和实时感,提高游戏的乐趣度。 最后,官方资源还提供了一些音频资源括背景音乐、音效等。这些音频资源可以帮助开发者为游戏增加音乐和声效,提升游戏的音频体验。 总之,Unity2018官方标准资源是一套丰富多样的资源集合,可以帮助开发者快速创建高质量的游戏,提升游戏的视觉和音频效果,减少开发周期和成本。无论是新手还是经验丰富的开发者,在游戏开发过程中都可以从中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值