【Unity 3D】学习笔记 - 巡逻兵

本文介绍了如何在Unity 3D中设计和实现智能巡逻兵,包括构建随机地图,使用工厂模式创建巡逻兵,实现巡逻与追击逻辑,以及玩家交互。巡逻兵会在遇到障碍或发现玩家时调整行为,游戏结束条件为玩家与巡逻兵碰撞,途中成功摆脱巡逻兵可得分。
摘要由CSDN通过智能技术生成

智能巡逻兵


  • 游戏设计要求:

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

    • 必须使用订阅与发布模式传消息
    • 工厂模式生产巡逻兵

 

构建场景


首先准备游戏资源,使用子迷宫预制来构建地图

制作三个只有地板颜色不同的子迷宫预制,构建完整迷宫时交替使用。

构建地图添加五列子迷宫,每一列的延伸方向随机,如此可以构建出随机地图。相关代码如下:

    public void LoadResources() {
        Instantiate(Resources.Load("Prefabs/Light"));
        Instantiate(Resources.Load("Prefabs/Entry"));
        blood = Instantiate(Resources.Load("Prefabs/Blood"), new Vector3(40, 40, 40), Quaternion.identity) as GameObject;
        role = Instantiate(Resources.Load("Prefabs/role")) as GameObject;
        float pos_z = 0, pos_x;
        int dir, sum = 0, size = 5;
        GameObject maze, temp;
        guardFactory gf = guardFactory.getInstance();
        for (int i = 0; i < size; i++) {
            dir = Random.Range(0, 2);
            pos_x = i * 2.8f;
            for (int j = 0; j <= i; j++, sum++) {
                if (sum%3 == 0)
                    maze = Instantiate(Resources.Load("Prefabs/g_maze"), new Vector3(pos_x, 0, pos_z), Quaternion.identity) as GameObject;
                else if (sum%3 == 1)
                    maze = Instantiate(Resources.Load("Prefabs/y_maze"), new Vector3(pos_x, 0, pos_z), Quaternion.identity) as GameObject;
                else maze = Instantiate(Resources.Load("Prefabs/b_maze"), new Vector3(pos_x, 0, pos_z), Quaternion.identity) as GameObject;
                temp = gf.getNewGuard(pos_x - 0.9f, 0, pos_z - 0.9f);
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值