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

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

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

public class DefineEvent : MonoBehaviour
{
    
}

2.定义事件原型

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

3.保存运行测试

测试结果

unity如何将自己定义的事件显示在Inspector面板_第2张图片

如有不足欢迎下方留言评论。。。。。。。 

你可能感兴趣的:(unity3d)