Unity3D ARPG游戏开发《最初的幻想》之强化敌人AI,折腾的GUI

来源:互联网 发布:淘宝客服沟通技巧ppt 编辑:程序博客网 时间:2024/05/16 12:23


昨天搞了死亡的完善与提示栏的工作。今天的话,首先再升级一下敌人的Ai吧。毕竟在玩家在敌人身后使劲攻击的话,这敌人也都不会有反应的,太不合理了。

打开Enemy脚本,在最前面“变量”标签中,先定义一个计数器,因为必须考虑到被同类“误伤”的情况:

private int m_attackMeCount=0;//被一个同类对象攻击的次数

然后再在最下面的WaitForAttack函数中将自己的对象传入自己的攻击对象,以作判断:

m_damageTarget.m_changeMeTarget=m_transform;//将自己的对象传给攻击的目标

现在就可以在GetState函数中对攻击自己的目标进行判断了:

if(m_changeState.m_changeMeTarget!=null){if(m_changeState.m_changeMeTarget.tag=="Enemy"){m_attackMeCount++;if(m_attackMeCount>3)//敌人被同样是怪物的敌人攻击三次以上,就会也攻击攻击自己的敌人怪物了{m_isIdle=false;m_attackTarget=m_changeState.m_changeMeTarget;}}else//如果被非同类的攻击,就直接打起来了{m_isIdle=false;m_attackTarget=m_changeState.m_changeMeTarget;}}

这里我判断的计数器为三,也就是说,如果敌人被同样是怪物的敌人攻击了三次以上,就把自己的攻击目标设为攻击自己的,否则就直接攻击攻击自己的对象。

最后在PlayerControl脚本中,也还要加上一句将自己的对象传入攻击对象的语句:

m_nowAttackTarget.m_changeMeTarget=m_transform;

一样放在WaitForAttack中。

因为前面用到了“Enemy”标签来判断攻击自己的是否是敌人这一类,所以还要在编辑器中新建一个名为“Enemy”的Tag,然后再Enemy脚本的Start函数中加上这么一句话:

m_transform.tag=”Enemy”;

现在运行,一切Ok了。

那么现在继续下一步,把敌人的血条也加上罢!

这个如果使用DaikonGui就比较简单了,亏我第一做这游戏时,还用世界坐标转屏幕坐标,各种麻烦地花了好久才搞定……

算了,这个的麻烦成度同样超乎想象了….东西做是做好了,但是头顶的描述信息是所有人都会用到的,所以我想把它做成一个预制体放进去,待事例化一个什么用的着的东西时,直接将血条啊什么的实例化出来,直接传数据就是了,可是失败了……事例化出来的UI必须要在UI相机之下作为其子物体才有用!搞了一大晚上了,都没找着解决之道,本来找着一个可以将物体设置为另一个物体子物体的函数,但是却对DaikonGUI无效……

明天再研究不出来,我就还是用笨办法来解决了。。。。。。

0 0