Unity3d——巡逻兵游戏(订阅与发布模式)

本文介绍了使用Unity3D开发巡逻兵游戏的过程,涉及发布订阅模型的应用。游戏要求包括创建地图、巡逻兵路径规划、碰撞检测和玩家交互。通过发布者发布消息,订阅者接收并响应,实现巡逻兵与玩家的行为交互。文章还讨论了在开发过程中遇到的Bug和解决思路。
摘要由CSDN通过智能技术生成

初识发布与订阅模型
完成一下课堂的实验:Garen跳到最高点时发出消息“JumpTopPoint”,发出通知消息,订阅者接收到消息,做出相应反馈。
放个代码:

//发布
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GarenEvent : MonoBehaviour {
    public delegate void GarenSubject(GameObject self, string message); //定义回调函数类型 
    public static event GarenSubject OnGarenSubjectNotify; //定义subject 

    void JumpTopPoint()
    {
        Debug.Log("Jump to the top point!");
        if (OnGarenSubjectNotify != null)
            OnGarenSubjectNotify(this.gameObject, "AtTop"); //发出通知,事件由谁处理, 如何处理都不需要知道
    }
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
       // JumpTopPoint();

    }
}
//订阅,处理
public class SceneController : MonoBehaviour {
    void ReceiveMessage(Object  sender, string info)
    {
        Debug.Log("Has Received");

    }
    void OnEnable()
    {
        GarenEvent.OnGarenSubjectNotify += ReceiveMessage; //订阅
    }
    void OnDisable()
    {
        GarenEvent.OnGarenSubjectNotify -= ReceiveMessage; //取消
    }
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame

}

把这两个代码文件都挂在Garen上就可以了,结果大概是这个样子:当Garen跳到最高点的时候(这里需要在Animation窗口手动添加Animation Event,在最高点key frame右键添加Event,Function就写JumpTopPoint,如果不手动添加Event,是不会有任何反应的,因为代码里并没有调用JumpTopPoint();),会在控制台显示
这里写图片描述


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值