WNL 发表于 2015-3-12 09:26

宠物跟随

   //定义一个变量来引用要跟随的对象
    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);
            }
      }

    }




联系电话    13552230323    QQ      3164087565

kensniper 发表于 2015-9-17 17:29


也不能一竿子打死呀!{:soso__11174995096617402082_3:}

xiaop 发表于 2017-2-13 12:24

很不错

scp306806106 发表于 2017-2-13 13:02

楼主是超人

kj5555 发表于 2017-2-13 12:44

顶顶多好

游卧云端 发表于 2017-2-13 12:18

真心顶

Mr._chen。 发表于 2017-2-13 12:19

难得一见的好帖

泳装魔王 发表于 2017-6-17 19:55

楼主是超人

gqxsunshine 发表于 2017-6-17 20:12

顶顶多好

ben50490 发表于 2017-6-17 19:35

真心顶
页: [1]
查看完整版本: 宠物跟随