Unity3d 学习之路——简单巡逻兵
游戏规则与游戏要求
智能巡逻兵
- 游戏规则
使用WSAD或方向键上下左右移动player,进入巡逻兵的追捕后逃脱可积累一分,若与巡逻兵碰撞则游戏结束,收集完地图上的所有水晶即可获胜。 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,+ 用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
程序设计要求:
- 必须使用订阅与发布模式传消息
subject:OnLostGoal
Publisher: ?
Subscriber: ? - 工厂模式生产巡逻兵
- 必须使用订阅与发布模式传消息
成品图
先看一下成品图吧,感觉是除了第一次作业之外,这次是自己做得最好的一次了。
做了整整两天,界面还没很完美。
游戏UML图
游戏实现
用到了C#的委托和事件实现发布与订阅模式,没有实现动作分离管理。
+ SSDirector,IUserAction,和ISceneController和之前的差不多甚至一样
+ 地图的绘制
建好一个Plane,再绘制好围墙,和几个触发器:
- 巡逻兵的动作(Patrol.cs):
- 属性与变量
public enum PatrolState { PATROL,FOLLOW};
public int sign; //the patrol in which area
public bool isFollowPlayer = false;
public GameObject player=null; //the player
public Vector3 startPos,nextPos;
private float minPosX,minPosZ; // the range of this patrol can move;
private