Unity基础包 刚体TPS类 3个第三人称脚本的研究

版本:unity 5.3.4  语言:C#

 

第三人称的脚本有三个,一个是移动基础,一个是用户控制,还有一个会自动寻路的AI控制,关于NavMeshAgent会用是会用,但是还是比较好奇他的一个内部实现的。

 

移动基础的代码是有点多的,所以我们按照逻辑顺序线看用户控制的ThirdPersonUserControl脚本:

// 用户控制器,基于ThirdPersonCharacter移动类这个脚本
[RequireComponent(typeof (ThirdPersonCharacter))]
public class ThirdPersonUserControl : MonoBehaviour
{
    private ThirdPersonCharacter m_Character; //ThirdPersonCharacter脚本的引用
    private Transform m_Cam;                  //主相机的位置
    private Vector3 m_CamForward;             //当前相机的正前方
    private Vector3 m_Move;                   //根据相机的正前方和用户的输入,计算世界坐标相关的移动方向
    private bool m_Jump;                      

    // 初始化
    private void Start()
    {
        // 获取主相机,这边的实现跟球控制器是一样的
        if (Camera.main != null)
        {
            m_Cam = Camera.main.transform;
        }
        else
        {
            // 在这个例子中我们使用世界坐标来控制,也许这不是他们做希望的,不过我们至少警告一下他们
            Debug.LogWarning("警告:不存在一个主相机,球需要一个tag为MainCamera的相机,来做相机关联的移动");
        }

        // 获取第三人称的移动脚本,这个不能为空
        m_Character = GetComponent<ThirdPersonCharacter>();
    }

    // 更新
    private void Update()
    {
        if (!m_Jump)    //不在跳跃状态下,如果读到跳跃则更新变量
        {
            m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
        }
    }


    // 固定更新,用于物理的同步
    private void FixedUpdate()
    {
        // 获取用户的输入
        float h = CrossPlatformInputManager.GetAxis("Horizontal");
        float v = CrossPlatformInputManager.GetAxis("Vertical");
        bool crouch = Input.GetKey(KeyCode.C);

        // 计算移动方向,并传递给角色
        if (m_Cam != null)
        {
            // 计算相机关联方向,这边同样强调了前方向
            m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
            m_Move = v*m_CamForward + h*m_Cam.right;
        }
        else
        {
            // 当没有相机时,直接以世界坐标轴作为参考
            m_Move = v*Vector3.forward + h*Vector3.right;
        }
#if !MOBILE_INPUT
		// 走路速度减半
	    if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f;
#endif

        // 将所有的参数传递给移动类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值