You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何引用其他函数并实现类似按钮on-click事件的Inspector拖拽赋值

实现方案

Unity原生的UnityEvent体系就能直接实现和按钮OnClick完全一致的效果,无需额外第三方工具,实现步骤如下:


步骤1:引入命名空间

在你的自定义脚本头部引入对应命名空间:

using UnityEngine.Events;

步骤2:声明事件字段

在脚本类中声明你需要的事件字段,加上[SerializeField]特性即可在Inspector面板显示:

// 无参数的自定义事件
[SerializeField] private UnityEvent onCustomAction;

// 如果需要带参数的事件,需要先声明可序列化的自定义事件类,例如传int类型参数
[System.Serializable]
public class IntActionEvent : UnityEvent<int> {}
[SerializeField] private IntActionEvent onIntParamAction;

步骤3:添加事件触发逻辑

在你需要执行回调的逻辑位置调用事件的Invoke方法即可:

private void SomeCustomLogic()
{
    // 你的业务逻辑代码...
    
    // 触发无参数事件,加?.做空安全校验
    onCustomAction?.Invoke();
    
    // 触发带参数事件,传入对应类型的参数即可
    onIntParamAction?.Invoke(100);
}

完整示例脚本

using UnityEngine;
using UnityEngine.Events;

public class CustomEventHolder : MonoBehaviour
{
    [SerializeField] private UnityEvent onTriggerEnter;
    [System.Serializable]
    public class StringEvent : UnityEvent<string> {}
    [SerializeField] private StringEvent onMessageSend;

    // 示例:碰撞到物体时触发事件
    private void OnCollisionEnter(Collision other)
    {
        onTriggerEnter?.Invoke();
        onMessageSend?.Invoke($"碰撞到物体:{other.gameObject.name}");
    }
}

Inspector赋值操作步骤

  • 将编写完成的脚本挂载到场景内的任意GameObject上
  • 找到脚本组件下对应的事件字段,点击右下角+号新增回调条目
  • 将你想要调用函数的所属GameObject拖拽到回调条目的对象卡槽中
  • 点击下拉列表,选中对应脚本下你要调用的public函数即可完成配置

注意事项

  • 待调用的函数必须是public访问权限,否则不会出现在下拉列表中
  • 带参数的事件对应的函数参数类型,必须和自定义事件类的泛型参数类型完全一致
  • 如果事件未赋值,直接调用Invoke会触发空引用错误,建议始终使用?.Invoke()的写法

内容的提问来源于stack exchange,提问作者Filip Grujic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:27:05