1、智能巡逻兵
游戏设计要求
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
程序设计要求
- 必须使用订阅与发布模式传消息
- subject:OnLostGoal
- Publisher: ?
- Subscriber: ?
- 工厂模式生产巡逻兵
友善提示1:生成 3~5个边的凸多边型
- 随机生成矩形
- 在矩形每个边上随机找点,可得到 3 - 4 的凸多边型
- 5 ?
友善提示2:参考以前博客,给出自己新玩法
游戏程序设计
首先,在找素材的时候找到一个别具一格的素材。Scivolo Character Controller
素材包里面不仅有一个有趣的地形(可供巡逻兵游戏的进行),还实现了第三人称的玩家模型,不仅可以通过鼠标来控制视图,可以上下左右走动,还可以跳,爬楼梯的更是不在话下。
因而,地图稍微改改布局,改宽改大,就直接用作本次游戏的场景了。人物的话计划也是改改模型即可,脚本还是用原来的。怎一个舒服了得
稍微将原来的地图改改,适当加几个AreaCollider,用于后续触发巡逻兵的追捕,如此一来这个游戏的地图就完成了。
需要注意的是AreaCollider里面的碰撞体需要设置isTrigger。
可惜的是,如此好的一个地图却无法做成预制,或许是因为这个资源包里面的Mesh Filter缺少的缘故,做成预制之后再拖出来就复原不了现在这个样子了。
原因就是做成预制之后上图的Mesh就变成了空。
这么一来的话,做不成预制,就无法像以往那样在运行时再实例化地图了,只能够通过修改Active这种蠢蠢的方式了。手动狗头
人物模型的话呢,我也找到了一个不错的,VoxelCharacters。在这里我们用到三种人物预制。
Hero用作玩家。
Zombie用作巡逻兵。
当然,为给游戏增加一点趣味性,BlueIdol用作我们此次任务需要拯救的公主。手动狗头。
动作的话,三者都是一样的,新建一个Animator Controllerperson
,
设置好参数,状态,触发isWin的话就跳到win状态,触发isDead的话就跳到die状态,isRunning为true的话就转到状态run,否则保持在Initial State。
四个状态的动作设置如上图所示,用的全都是素材包VoxelCharacters里面的动作。
毋庸置疑,事先需要把该添加的组件(动画,刚体,碰撞体),添加好。
Zombie和BlueIdol的设置都是一样的,现在任务就是把前面下载到的玩家资源里面的模型更换掉。
把原来的除了Camera Target以外的都可以删掉了,把Hero模型添加进来,同时为了方便,也可以把摄像机(素材包里面挂了脚本OrbitingCamera的摄像机,不是普通摄像机)拖进来。
这样一来直接运行的话肯定是bug一大堆,需要稍作修改。
Camera Target的高度需要调调,
脚本OrbitingCamera里面的Distance也需要调,
脚本CharacterCapsule里面的胶囊碰撞体的半径和高度要调,这里因为在脚本里面有添加碰撞体,因而在Hero里面就不需要添加刚体和碰撞体组件。