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
相关产品推荐
相关产品推荐

