Unity3d游戏(七): 智能巡逻兵
智能巡逻兵
- 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
设计过程:
采用MVC架构,用工厂模式产生巡逻兵。

巡逻兵的设计:
巡逻兵的路径为一个3~5个边的凸多边形,需因此要一些数组来存放巡逻兵路径的相对位置:
if (sideNum == 3) {
posSet = new Vector3[] {new Vector3 (0, 0, 0), new Vector3 (8, 0, 0),
new Vector3 (4, 0, 6), new Vector3 (0, 0, 0)};
} else if (sideNum == 4) {
posSet = new Vector3[] {new Vector3 (0, 0, 0), new Vector3 (8, 0, 0),
new Vector3 (8, 0, 8), new Vector3 (0, 0, 8), new Vector3 (0, 0, 0)};
} else {
posSet = new Vector3[] {new Vector3 (0, 0, 0), new Vector3 (5, 0, 0),
new Vector3 (7, 0, 5), new Vector3 (3, 0, 8), new Vector3 (-2, 0, 5), new Vector3 (0, 0, 0)};
}
Patrol的Update ()方法来实现巡逻兵的动作
void Update () {
if (playerIsLive && inField (playerPos)) { //玩家存活并且在此巡逻兵视野中
catchPlayer (); //追击玩家
} else {
if (patrolInMap (currentSide)) { //否则沿着自己的路径巡逻
if (++currentSide >= sideNum) {
bothPos = transform.position;
currentSide = 0;
}
}
}
}
其中追击玩家以及巡逻的具体实现参考后面的代码Patrol.cs
设计的重点是使用发布订阅模式完成Player、Patrol、SceneController以及ScoreManager之间的通信。首先定义了一个抽象类Subject.cs(发布者)和一个接口Handle

本文介绍如何在Unity3d中设计和实现智能巡逻兵游戏。游戏要求巡逻兵在预设的凸多边形路径上行走,遇到障碍会改变方向,发现玩家则进行追击。通过发布订阅模式实现游戏对象间的通信,使用事件和委托处理计分系统,随着玩家得分增加,游戏难度逐步升级。文章包含关键代码示例。
最低0.47元/天 解锁文章
1213

被折叠的 条评论
为什么被折叠?



