Example #1
0
 //核心的行为控制函数。行为逻辑图的装换部分重现
 private void actionmachine()
 {
     if (ailibrary.selfvalueisok() && !ailibrary.playerisinstartview() && !ailibrary.findstrongplayer())//如果视野内(初始视野)无玩家,并且自身血量OK,周围没有危险的话,就执行默认的行走行为
     {
         state = 0;
     }
     //state == 4暂时
     else if ((state == 4 || state == 0) && ailibrary.playerisinview() && ailibrary.findstrongplayer())//如果是默认状态,并且发现玩家,如果玩家比较强力的话(暂时添加了战斗逃跑)
     {
         state = 1;
     }
     else if (state == 1 && ailibrary.playerisinview() == false)//如果是逃跑中,并且玩家不再视野内的话(安全了)那就先原地盘旋(目前是直接停住)
     {
         state = 2;
     }
     else if (state == 2 && ailibrary.playerisinview() && ailibrary.findstrongplayer())//如果是原地暂停状态,然后又发现玩家的话,继续回到逃跑
     {
         state = 1;
     }
     else if (ailibrary.playerisinview() && !ailibrary.findstrongplayer() && !ailibrary.playerisinAttackview())//这个是转到追击玩家状态,判断因素应该更智能的进行修改,目前仅进行是否攻击NPC的属性判断,和简单的范围判断,与自身判断
     {
         state = 3;
     }
     else if ((state == 3 || state == 0) && ailibrary.playerisinAttackview() && !ailibrary.havehinder())//转到攻击玩家
     {
         state = 4;
     }
 }
Example #2
0
 // Update is called once per frame
 void Update()
 {
     if (!IsLive())
     {
         return;                  //如果已死,直接跳过
     }
     //进入感应范围
     if (thisLnx.playerisinstartview())
     {
         if (entered)
         {
             return;
         }
         else
         {
             if (null == lifeBar)
             {
                 InstantiateLIfeBar();//如果变量为空,重新生成预制体
                 lifeBar.Display(1, true);
             }
             else
             {
                 lifeBar.Display(1, false);
             }
             entered = true;
         }
     }
     else
     {
         if (!entered)
         {
             return;
         }
         else
         {
             lifeBar.Hide(1, false);
             entered = false;
         }
     }
 }