智能巡逻兵
参考博客: Unity3d学习之路-简单巡逻兵
(偷了一下懒,主人公和巡逻兵的预制体均为上述博客博主所用的预制体)
游戏和设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
程序设计要求:
- 必须使用订阅与发布模式传消息
- 工厂模式生产巡逻兵
游戏规则和背景:
- 背景:
小新(主角)不知道怎么回事被送到了一个小迷宫中,迷宫中有九间房,每间房都有一个巡逻兵,小新若是被这些巡逻兵发现,则会被杀死(游戏结束)。小新要逃离这个地方,他必须得先找到三把钥匙,然后,找到迷宫的出口(一个门口),才能离开这里。 - 游戏规则:
通过WASD或方向键控制人物走动,在一个房间中,当人物被巡逻兵发现时,巡逻兵会追赶人物,人物必须要逃离出该房间才能脱离该巡逻兵的追赶,每逃离一次追赶,分数加一,当人物被巡逻兵追赶上时,游戏失败。人物从迷宫中找到三把钥匙,并走到迷宫的门口,即可赢得游戏。
游戏场景说明
刚开始进入游戏,屏幕显示的为游戏说明,此时,点击任意地方进入游戏。
进入游戏后,主摄像头会跟随人物移动,而另一个摄像头则负责从上空拍摄整个地图(因为之前没这个小地图时,发现很难过关)。总共有九个房间,每个房间都会有一名巡逻兵,在没有捉捕玩家的时候,巡逻兵走一个正方形。下面,对地图做一下分析。
游戏胜利或游戏失败后,点击屏幕中间的字,即可重新开始游戏。
部分代码
游戏代码量比较多,这里就选择一部分来说明,若有需要,请传送——传送门
玩家操作处理:
//玩家操作,为增加难度,玩家每次只能上下左右其中一个方向
if(FirstSceneController.gameStatus == 0)
{
if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
{
action.MovePlayer(0);
}
else if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
{
action.MovePlayer(2);
}
else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
{
action.MovePlayer(-1);
}
else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
{
action.MovePlayer(1);
}
}
记分员类
//记分员,记录分数和各种必要信息
public class ScoreRecorder : MonoBehaviour
{
public FirstSceneController sceneController;
//分数
public int score = 0;
//已找寻了的钥匙的数目
public int keys = 0;
//是否在出口前
private bool inDoor = false;
// Use this for initialization
void Start()
{
sceneController = SSDirector.GetInstance().CurrentScenceController as FirstSceneController;
sceneController.recorder = this;
}
//获取当前分数
public int GetScore()
{
return score;
}
//增加分数
public void