课程相关资源
作业与练习
1、智能巡逻兵
- 提交要求:
- 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
- 程序设计要求:
- 必须使用订阅与发布模式传消息
- subject:OnLostGoal
- Publisher: ?
- Subscriber: ?
- 工厂模式生产巡逻兵
- 必须使用订阅与发布模式传消息
- 友善提示1:生成 3~5个边的凸多边型
- 随机生成矩形
- 在矩形每个边上随机找点,可得到 3 - 4 的凸多边型
- 5 ?
- 友善提示2:参考以前博客,给出自己新玩法
效果图
场景和人物使用现有素材制作,人物动画控制器是自己制作。
![]()
![]()
游戏组织结构
这次依然是使用了动作分离,MVC模式和工厂模式,以及新加了订阅与发表模式。
游戏对象制作
- 玩家对象,添加了刚体,胶囊碰撞器以及动画:
- 巡逻兵对象,添加了刚体,胶囊碰撞器,动画以及碰撞事件处理脚本:
- 游戏地图由一系列组件制作:
代码组织结构
接口,游戏场景控制器以及GUI
-
接口类声明在命名空间Interface中,UserAction类中主要为GUI和场景控制器交互的的方法,SSActionCallback中则为运动控制器的回调函数。
namespace Interfaces { public interface ISceneController { void LoadResources(); } public interface UserAction { int GetScore(); void Restart(); bool GetGameState(); //移动玩家 void MovePlayer(float translationX, float translationZ); } public enum SSActionEventType : int { Started, Completed } public interface SSActionCal