您的位置:首页 > 移动开发 > Unity3D

Unity行为树

2015-11-06 20:22 423 查看
1、导入包Behavior Designer 1.5.0.1和Behavior Designer-Movement Pack 1.4.1b

2、编写两个类:一是:条件任务类,二是:行为任务类

     tips:引入Behavior.Runtime和Behavior.Runtime.Tasks库。

       (1)条件任务类:继承Conditional类

       (2)行为任务类:继承Action类

     

    例子:遍历场景内的敌人,是否在视野以内,是则移动,否则不作任何操作。

    条件类:

    [TaskCategory("Demo")]//特性往编辑器上添加目录,方便查询

    public class EnemyInSight : Conditional

    {

            //目标Trans

            public SharedTransform targetTrans;

            //场景内的所有敌人

            private GameObject[] targetList;

            //目标标签

            public string targetTag;

            //可视角度

            public float angle;



            public override void OnAwake()

             {  

                 targetList=GameObject.FindGameObjectsWithTag(targetTag);

             }

             public override Taskstatus OnUpdate()

             {

                for(int i=0;i<targetList.length;++i)

                 {

                     if(IsInSight(targetList[i],angle))

                     {

                         targetTrans.Value=targetList[i];

                        

                         return Taskstatus.Success;

                     }

                 }

                return Taskstatus.Failure;

             }

    

             private bool IsInSight(Transform target,float angle)

              {

                  Vector3 direciton=target.position-transform.position;

                  if(Vector3.Dot(transform.forward,direciton)<angle)

                  {  return true;  }

              }

     }

     行为类:

    [TaskCategory("Demo")]//特性往编辑器上添加目录,方便查询​

​    public class MoveTowards : Action

    {

       public float speed;

       public SharedTransform target;

       public override TaskStatus OnUpdate()

       {

           Vector3 distance=target.Value.position

           if(Vector3.SqrMagnitude(distance)<0.1f)

           {

               return TaskStatus.Success;

           }

           transform.position=Vector3.MoveTowards(transform,target.Value.position,speed*Time.deltaTime);

           return TaskStatus.Running;

       }

    }​

   


 3、 往主角添加行为树组件,并打开。

 4、并在Task任务面板上,添加行为树



5、并在Varibles面板上添加全局变量: (target的赋值在条件类里实现)


6、并在Inspector面板上,为条件类与行为类初始化个属性:


       


7、运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity 行为树