Unity3d UI预置:按钮不保留onclick()设置

Unity3d UI预置:按钮不保留onclick()设置,unity3d,unity3d-ui,Unity3d,Unity3d Ui,我有一个简单的预制,由一个预制按钮和一个面板。 按钮放置在面板内部,因此它是面板的子级。我确实保存了预制件,一切都很好 然后,我在按钮上添加了一个点击事件;所以我确实添加了我想要使用的脚本所在的游戏对象,并选择了正确的使用方法。我确实更新了预制件并将其从场景中删除 现在,当我用Resources.Load(“myUIprefab”)在场景中实例化这个预置时;它正确显示面板、按钮和颜色/设置 但是点击按钮本身没有任何连接;这导致按钮什么也不做 “预制”不是一种保存对象以便以后使用的方法吗?在这种情

我有一个简单的预制,由一个预制按钮和一个面板。 按钮放置在面板内部,因此它是面板的子级。我确实保存了预制件,一切都很好

然后,我在按钮上添加了一个点击事件;所以我确实添加了我想要使用的脚本所在的游戏对象,并选择了正确的使用方法。我确实更新了预制件并将其从场景中删除

现在,当我用Resources.Load(“myUIprefab”)在场景中实例化这个预置时;它正确显示面板、按钮和颜色/设置

但是点击按钮本身没有任何连接;这导致按钮什么也不做

“预制”不是一种保存对象以便以后使用的方法吗?在这种情况下,它应该保留单击设置。这是新Unity UI系统的错误还是不幸的实现?
如果没有填充click()或其他委托,则使用按钮或其他GUI元素创建预置没有什么意义。

存储在预置中的游戏对象只能包含对同一预置中其他对象或其他预置的引用。这对于对象引用、事件等都是正确的


如果希望事件持续存在,则必须在同一预设中有一个事件处理程序,并通过按钮调用该事件处理程序。这可能是一个简单的处理程序方法,在调用时引发标准的.Net事件(.Net事件可能比Unity事件更容易使用)。

对不起,我来晚了。我成功地保持了事件数据的正确设置,只需在具有正确设置的场景中保持预设的一个实例处于禁用状态,然后将生成它们的行为指向该对象而不是预设

在某种情况下,如果要调用附加到不相关游戏对象(例如GameManager)的脚本中定义的方法,则必须将另一个游戏对象设为预置,并将onclick方法分配给该预置。

我要求您选择的onclick方法来自层次对象,而不是预置。因此,当您创建Prefable时,它将失去与层次结构的连接。要解决这个问题,您需要用代码分配onclick处理程序;即使我在另一个预制中保存这个修改过的预制,我也会松开它?我想我需要先通过代码,然后通过按钮的addlistener将委托添加到我的方法中。谢谢。Jerry dude-在预制内添加处理程序调用有什么可能的用途。说是你干的。然后,在场景中放置预置时:必须拖动才能连接到该处理程序。你为什么要这么做?只需拖动连接到按钮,没有区别!嗨,汤姆,你的答案当然是正确的。我不知道你为什么提到/Net事件比UnityEngine.EventSystems更容易使用。。。我的意思是,
UnityEngine.EventSystems
是完全内置的:您只需拖动想要发出信号的组件即可。你能给我举个例子,说明如何按照你的思维方式使用.Net事件吗?你是对的。这个事件当然仍然可以是一个标准的统一事件。实际上我想提出另一点。如果在运行时生成预置,通常不希望对预置的内部结构进行硬编码假设。您更希望通过基本行为类型(如“BaseDialog”或其他类型)来引用预置。你知道它在某个地方会有一些OK按钮,但你不想知道在哪里。最简单的方法是让BaseDialog发布一个OKClicked事件,并向用户隐藏内部连线。感谢您的澄清,Thomas。是的,对象是一个预置,不会在运行时创建;它存在于我的资源文件夹中,因此我可以在每次需要时删除并销毁它。我认为这种方法是最直接的,对于一个显示许多面板的游戏来说,用户可以从面板中获取信息,也可以修改参数。而不是一直显示和隐藏面板;我只是装载一个预制件;显示数据,在需要的地方保存数据,当他们关闭窗格时,数据就会被销毁。我确实尝试过通过代码将事件添加到按钮,效果很好。再加3行代码。嗨@newbiez。在您的最后一条评论中,您建议:与其使用“预置”,不如让一个“模型”在场景中等待,然后使用它。事实上,你会很高兴听到这是完全正确的——这通常是最好的做法。事实上,一些团队从不使用预制件,只使用“模型坐在场景中”的想法。你完全正确。如果你愿意,一定要这样做。掌握这两种技巧。