2

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

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

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

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

不是预制件,一种保存对象以供以后使用的方法吗?在这种情况下,它应该保留点击设置。这是新 Unity UI 系统的错误还是不幸的实现?如果未填充 click() 或其他委托,则使用按钮或其他 GUI 元素制作预制件毫无意义。

4

3 回答 3

4

存储在预制件中的游戏对象只能保存对同一预制件内的其他对象或其他预制件的引用。对于对象引用、事件等都是如此。

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

于 2016-02-28T10:52:56.033 回答
1

对不起,我迟到了。我设法保持事件数据设置正确,方法是仅在具有正确设置的场景上停用预制件的实例,然后将产生它们的行为指向该对象而不是预制件。

于 2017-02-10T16:17:33.513 回答
0

在某种情况下,您想调用附加到不相关游戏对象(例如 GameManager)的脚本中定义的方法,您必须将此其他游戏对象设为预制件并将 onclick 方法分配给此预制件。

于 2018-12-28T10:22:50.467 回答