Unity3D跟隨腳本

 //定義一個變量來引用要跟隨的對象
    public Transform TargetObj = null;

    //定義一個對象引用角色的animator組件
    protected Animator animator;

    //定義一個角色控制器變量引用角色控制器
    protected CharacterController controller;

    //定義一個時間變量,主要用在使用Animator組件設置浮點函數
    private float SpeedDempTime = 0.25f;
    private float DirectionDempTime = 0.25f;

    void Start()
    {
        //對前面定義的兩個組件類型的變量animator和controller進行初始化
        animator = GetComponent<Animator>();
        controller = GetComponent<CharacterController>();
        if (animator) //當組件存在時
        {
            //對animator組件中的一個屬性animator 和 speed 進行隨機化設置
            //animator 和speed 的作用就是控制animator動畫的播放
            animator.speed = 1 + Random.Range(-0.4f, 0.4f);
        }
    }

    // Update is called once per frame
    void Update()
    {//控制角色跟隨的主要邏輯
        if (animator && TargetObj)
        {
            //是跟隨者跟隨的目標一起運動,同時兩者之間保持一定的距離之內
            if (Vector3.Distance(TargetObj.position, animator.rootPosition) > 3)//是一個物體跟隨另一個物體, 判斷兩個物體之間保持在硬頂的距離之內
            {
                animator.SetFloat("Speed", 1, SpeedDempTime, Time.deltaTime);
                //定義倆個矢量
                Vector3 curentDir = animator.rootRotation * Vector3.forward; // 定義角色的正方向 也就是角色的前方
                //通過計算判斷兩者之間的位置關係
                Vector3 wanterDir = (TargetObj.position - animator.rootPosition).normalized;

                //if else語句:判斷物體和當前物體之間的位置關係,主要用到了點積和差積的矢量的操作     來進行方向的判斷
                if (Vector3.Dot(curentDir, wanterDir) > 0)//當物體大於0 也就是物體的前方    
                {
                    //通過差積來判斷左右
                    animator.SetFloat("Direction", Vector3.Cross(curentDir, wanterDir).y, DirectionDempTime, Time.deltaTime);
                }
                else
                {
                    animator.SetFloat("Direction", Vector3.Cross(curentDir, wanterDir).y > 0 ? 1 : -1, DirectionDempTime, Time.deltaTime);
                }
            }
            else
            {
                animator.SetFloat("Speed", 0, SpeedDempTime, Time.deltaTime);
            }
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章