首页 > 手游开发 > Unity3D > Unity如何将自己定义的事件显示在Inspector面板
2021
07-12

Unity如何将自己定义的事件显示在Inspector面板

 

第一步:如何显示在面板上

1.创建一个C#脚本并修改脚本名称 友情提示:脚本名称要具备一定的含义

public class DefineEvent : MonoBehaviour
{
    
}

2.定义事件原型

public class DefineEvent : MonoBehaviour
{
    
}
//以下是事件原型的定义
[Serializable]
public class Up : UnityEvent<KeyCode> { }
[Serializable]
public class Down : UnityEvent<KeyCode> { }
[Serializable]
public class Left : UnityEvent<KeyCode> { }
[Serializable]
public class Right : UnityEvent<KeyCode> { }
//Serializable作用:序列化类 作用:可以显示在Inspector面板 位置:using System命名空间下.
//UnityEvent<KeyCode>:这是unity封装的一个事件类,该类提供了4个泛型参数的重载,可以根据不同的需求设置对应的参数类型和个数 备注:我这边传入的是一个枚举类型

3.声明事件

public class DefineEvent : MonoBehaviour
{
    //声明事件 可以显示在Inspector面板
    public Up onUpEvent;
    public Down onDownEvent;
    public Left onLeftEvent;
    public Right onRightEvent;
    
}
//以下是事件原型的定义
[Serializable]
public class Up : UnityEvent<KeyCode> { }
[Serializable]
public class Down : UnityEvent<KeyCode> { }
[Serializable]
public class Left : UnityEvent<KeyCode> { }
[Serializable]
public class Right : UnityEvent<KeyCode> { }
//Serializable作用:序列化类 作用:可以显示在Inspector面板 位置:using System命名空间下.
//UnityEvent<KeyCode>:这是unity封装的一个事件类,该类提供了4个泛型参数的重载,可以根据不同的需求设置对应的参数类型和个数 备注:我这边传入的是一个枚举类型

4.保存,然后将该脚本挂在到场景中的任意一个游戏物体上。

最终效果图:

Unity如何将自己定义的事件显示在Inspector面板 - 第1张  | 逗分享开发经验

第二步:如何注册公开在面板上的事件

1.在脚本内声明对应的回调函数,具体操作步骤请百度搜索:Unity UGUI 按钮绑定事件的方式

public class DefineEvent : MonoBehaviour
{
    //声明事件 可以显示在Inspector面板
    public Up onUpEvent;
    public Down onDownEvent;
    public Left onLeftEvent;
    public Right onRightEvent;


    //以下是对应事件的回调函数. 备注:函数的权限修饰符必须位public,否则找不到
    public void OnUpCallBack(KeyCode key)
    {
        Debug.Log("我按下了"+ key+"键");
    }
    public void OnDownCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
    public void OnLeftCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
    public void OnRightCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
}
//以下是事件原型的定义
[Serializable]
public class Up : UnityEvent<KeyCode> { }
[Serializable]
public class Down : UnityEvent<KeyCode> { }
[Serializable]
public class Left : UnityEvent<KeyCode> { }
[Serializable]
public class Right : UnityEvent<KeyCode> { }
//Serializable作用:序列化类 作用:可以显示在Inspector面板 位置:using System命名空间下.
//UnityEvent<KeyCode>:这是unity封装的一个事件类,该类提供了4个泛型参数的重载,可以根据不同的需求设置对应的参数类型和个数 备注:我这边传入的是一个枚举类型

2.在Update函数进行按键测试

public class DefineEvent : MonoBehaviour
{
    //声明事件 可以显示在Inspector面板
    public Up onUpEvent;
    public Down onDownEvent;
    public Left onLeftEvent;
    public Right onRightEvent;


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            onUpEvent?.Invoke(KeyCode.W);//这种委托调用的格式是.Net4.x版本的语法,类似于三元运算.
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            onDownEvent?.Invoke(KeyCode.S);
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            onLeftEvent?.Invoke(KeyCode.A);
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            onRightEvent?.Invoke(KeyCode.D);
        }
    }

    //以下是对应事件的回调.
    public void OnUpCallBack(KeyCode key)
    {
        Debug.Log("我按下了"+ key+"键");
    }
    public void OnDownCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
    public void OnLeftCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
    public void OnRightCallBack(KeyCode key)
    {
        Debug.Log("我按下了" + key + "键");
    }
}
//以下是事件原型的定义
[Serializable]
public class Up : UnityEvent<KeyCode> { }
[Serializable]
public class Down : UnityEvent<KeyCode> { }
[Serializable]
public class Left : UnityEvent<KeyCode> { }
[Serializable]
public class Right : UnityEvent<KeyCode> { }
//Serializable作用:序列化类 作用:可以显示在Inspector面板 位置:using System命名空间下.
//UnityEvent<KeyCode>:这是unity封装的一个事件类,该类提供了4个泛型参数的重载,可以根据不同的需求设置对应的参数类型和个数 备注:我这边传入的是一个枚举类型

3.保存运行测试

测试结果

Unity如何将自己定义的事件显示在Inspector面板 - 第2张  | 逗分享开发经验

最后编辑:
作者:搬运工
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。