Unity中不新增脚本能否在GameObject下拉添加onClick事件?含MRTK Slate相关问题
MRTK Interactable 事件面板下拉菜单逻辑及自定义动作实现
1. GameObject选项的填充逻辑
你在Interactable脚本事件面板看到的下拉菜单是Unity自带的UnityEvent编辑器UI,填充逻辑由Unity内置实现,和MRTK的Interactable脚本无关,具体逻辑如下:
- 当你给UnityEvent拖拽赋值目标对象后,Unity编辑器会通过反射机制遍历目标对象的所有公共实例方法
- 方法会按所属类型自动分组:
- 如果方法属于
GameObject类本身,就会被归到最顶部的GameObject分类下,这个分类是所有GameObject对象的默认分类,和对象挂载的组件无关 - 如果方法属于对象挂载的某个继承自
Component的组件类,就会被归到对应组件名的分类下,比如你看到的Transform、SolverHandler等分类都是这么来的
- 如果方法属于
2. 自定义事件动作添加方法
不需要修改Interactable源码,也不需要修改Unity内置逻辑,按以下步骤操作即可将自定义动作添加到下拉菜单中:
- 编写自定义脚本,将需要触发的逻辑封装为公共无参方法,示例代码如下:
// 脚本挂到Slate对象上 public class SlateOperation : MonoBehaviour { // 点击关闭按钮时要执行的销毁逻辑 public void DestroySlate() { Destroy(gameObject); } }
- 回到Interactable的事件配置面板,将Slate对象拖拽到事件的目标对象输入框中
- 点开下拉菜单,即可看到和脚本名同名的
SlateOperation分类,选中分类下的DestroySlate方法即可完成配置
注:你无法向内置的
GameObject分类下添加自定义方法,该分类仅显示Unity官方定义的GameObject类自带方法,自定义方法都会自动归到对应自定义脚本的分类下,使用逻辑和内置方法完全一致。
替代实现方案
如果不想新增脚本,也可以直接使用GameObject分类下的SendMessage方法,在参数框填入你写的方法名即可,不过该方法性能低于直接绑定方法,更推荐用上述自定义脚本的方案。
内容的提问来源于stack exchange,提问作者holouser
相关产品推荐
相关产品推荐

