unity3d自动巡逻兵

这篇博客介绍了如何在Unity3D中设计一个自动巡逻和追击玩家的系统。游戏设计包括创建地图、设置巡逻路径、碰撞检测以及玩家与巡逻兵的交互。程序设计上,采用订阅发布模式传递消息,利用工厂模式生产巡逻兵,并给出了生成3-5边凸多边形的方法。此外,详细说明了事件发布和接收的实现,涉及GameModel和PatrolFactory类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

程序设计要求:
必须使用订阅与发布模式传消息
subject:OnLostGoal
Publisher: ?
Subscriber: ?
工厂模式生产巡逻兵
友善提示1:生成 3~5个边的凸多边型
随机生成矩形
在矩形每个边上随机找点,可得到 3 - 4 的凸多边型
5 ?
友善提示2:参考以前博客,给出自己新玩法

订阅与发布模式
在这里插入图片描述

代码结构
在这里插入图片描述

巡逻兵的运动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Com.Patrols;
public class PatrolBehaviour : MonoBehaviour {
   
    private IAddAction addAction;
    private IGameStatusOp gameStatusOp;
    public int ownIndex;
    public bool isCatching;    
    private float CATCH_RADIUS = 3.0f;
    void Start () {
   
        addAction = SceneController.getInstance() as IAddAction;
        gameStatusOp = SceneController.getInstance() as IGameStatusOp;
        ownIndex = getOwnIndex();
        isCatching = false;
    }
	
	void Update () {
   
        checkNearByHero();
	}

    int getOwnIndex() {
   
        string name = this.gameObject.name;
        char cindex = name[name.Length - 1];
        int result = cindex - '0';
        return result;
    }

    void checkNearByHero () {
   
        if (gameStatusOp.getHeroStandOnArea() == ownIndex) {
   
            if (!isCatching) {
   
                isCatching = true;
                addAction.addDirectMovement(this.gameObject);
            }
        }
        else {
   
            if (isCatching) {
   
                gameStatusOp.heroEscapeAndScore();
                isCatching 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值