弄了一晚上,终于弄出了让我很满意的,使角色能以第一人称的方式移动和转向的代码!
主要是有几个地方出了问题,各种调试都不行,最后才发现是Unity系统本身的问题,从2015年到现在都没有修复。
不过最后官方提供的MouseOrbit.js脚本派上了大用场!不然可能我就要换一种我不喜欢的方式去解决了!!!
总之, 我把写好的代码放出来,大家到时候可以直接使用就好。
在这里,我把代码整理到一个类中,大家使用的时候,直接挂到角色身上就OK!

 
using UnityEngine;
 
 
namespace Com.XiMiGua
{
    /// <summary>
    /// 
    /// </summary>
    [RequireComponent(typeof(Rigidbody))]
    [RequireComponent(typeof(CapsuleCollider))]
    public class FirstPersonPlayerMove : MonoBehaviour
    {
        #region 
        [Tooltip()]
        public Camera playerCamera;
        [Tooltip()]
        public float moveSpeed;
        [Tooltip()]
        public float mouseSpeed;
 
        private float x = 0.0f;//x
        private bool jump = false;//
        private float jumpCD=0.5f;//
        private float jumpTimer = 0.0f;//
        #endregion
 
 
 
        #region Unity
        void Start()//
        {
            var angles = playerCamera.transform.localEulerAngles;//
            x = angles.x;//x
        }
 
 
        void Update()
        {
            Move();//
            Rotation();//
            
            //
            if(jumpTimer<=jumpCD && jump){
                jumpTimer+=Time.deltaTime;//
                
            }else if(jumpTimer>=jumpCD){
                jump = false;//
            }
        }
 
        #endregion
 
 
 
        #region 
 
        /// <summary>
        /// 
        /// </summary>
        private void Move()
        {
            //
            transform.Translate(Vector3.forward * Time.deltaTime * Input.GetAxis(Vertical) * moveSpeed);
 
            //Left  Right
            transform.Translate(Vector3.right * Time.deltaTime * Input.GetAxis(Horizontal) * moveSpeed);
 
            //
            if (Input.GetKey(KeyCode.Space) && !jump)
            {
                jump = true;//
                jumpTimer =0;//0
                transform.Translate(Vector3.up*1.2f);//
            }
        }
 
 
        /// <summary>
        /// 
        /// </summary>
        private void Rotation()
        {
            //
            transform.Rotate(Vector3.up*Time.deltaTime* Input.GetAxis(Mouse X) * mouseSpeed);
 
            //– 
            //-3040
            x += Time.deltaTime * Input.GetAxis(Mouse Y) * mouseSpeed * 0.8f;
            x = ClampAngle(x, -30.0f, 40.0f);
            var rotation = Quaternion.Euler(x, 0, 0);
            playerCamera.transform.localRotation = rotation;
        }
 
 
 
        /// <summary>
        /// 
        /// </summary>
        private float ClampAngle(float angle , float min , float max )
        {
            if (angle < -360)
                angle += 360;
            if (angle > 360)
                angle -= 360;
            return Mathf.Clamp(angle, min, max);
        }
 
        #endregion
    }
}
 

使用的时候直接像这样,挂到角色身上就好。(不用管我之前的日志中讲了什么乱七八糟的代码,现在全部整合在这篇代码中了!那些代码都不需要啦!!!!)
然后在PlayerCamera字段中,指定一下角色身上的Camera组件。
Rigidbody和胶囊体碰撞器会自动添加。
这里的
Rigidbody组件只是用来:
1、为角色添加重力
2、进行碰撞检测(防止角色穿过障碍物)

大概的效果是这样哒~(GIF有些裂屏,实际上是没有裂屏的)


然后是Demo的下载地址,大家可以和之前的那篇的Demo进行比较~
(如果链接失效请联系我~)
链接:http://pan.baidu.com/s/1dFk0H7j 密码:wqa8