Unity小游戏: 智能巡逻兵

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

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)};
}

PatrolUpdate ()方法来实现巡逻兵的动作

void Update () {
    if (playerIsLive && inField (playerPos)) {  //玩家存活并且在此巡逻兵视野中
        catchPlayer ();     //追击玩家
    } else {
        if (patrolInMap (currentSide)) {    //否则沿着自己的路径巡逻
            if (++currentSide >= sideNum) {
                bothPos = transform.position;
                currentSide = 0;
            }
        }
    }
}

其中追击玩家以及巡逻的具体实现参考后面的代码Patrol.cs

  设计的重点是使用发布订阅模式完成PlayerPatrolSceneController以及ScoreManager之间的通信。首先定义了一个抽象类Subject.cs(发布者)和一个接口Handle.cs(订阅者)。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值