Unity3D—week9 巡逻兵
Unity3D—week9 巡逻兵
游戏设计要求
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
UML图
游戏效果
演示视频
https://pan.baidu.com/s/18GHhmBRw5UM8RmtaPBP7Hg
在github上也放了视频
场景搭建
这是一个简单的地图,整体分成四个部分,每两个相连的部分都有一个通道可以通过,在具体实现中也进行了不同部分的区分。游戏开始时主角会在一个没有巡逻兵的区域,其他区域都有巡逻兵。没穿过一个区域,就会得到一分。当主角进入有巡逻兵的区域后,巡逻兵就会向主角发起攻击,主角被攻击到游戏结束。
人物预设
人物player和patrol是网上找的两个人物
动作控制如下:
具体实现
主角实现
当主角身上发生了某些事情,比如进入某个区域,与patrol碰撞时,我们就可以发布相应信息,根据信息中参数的不同,做出相应动作,如patrol会追击主角,或者当主角进入自己区域时放弃追击,停止动作。当主角死亡,游戏结束,SceneController发布死亡信息。巡逻兵循环走动
动作结束后,在动作结束回调函数里再添加动作。巡逻兵有3个动作,idle(一段时间内站着不动),walk和run,这样,巡逻兵在没有发现主角到自己区域的时候不会移动的很快,同时是一个走路的动作,而主角到了巡逻兵所在的区域,巡逻兵会加快速度并且换一个动作,这样可以体现出发现敌人前后的区别,让游戏更好玩。当巡逻兵是idle状态的时候,刚开始游戏主角在一个没有巡逻兵的区域,当走到有巡逻兵的区域时,我们就会调用idle动作,当站着不动的时间消耗完毕的时候,我们就会调用回调函数,从而让巡逻兵做预先设置好的下一个动作,空闲->往左走->往上走->往右走->往下走->如此循环,就实现了巡逻的功能。