如何解决Unity:在 Unity 中制作界面的最佳方式
对于我的 Android 游戏,我需要制作一个弹出界面窗口,该窗口应该在关卡完成时出现。这样做的最佳方法是什么?
更新 2:有效!我使用的最终版本:
剩下的唯一事情就是在获胜条件为真时将 Dialog
游戏对象 设置为活动状态。它是在我的 GameManager
脚本 中完成的。因此,在每个场景中,我必须手动将 Dialog
object 拖到 GameManager
script 的 Dialog 变量 上,所以它可以改变 Dialog
object。我尝试在 Dialog
的 Start() 方法中获取(查找)GameManager
对象,但它无法完成,因为默认情况下 Dialog
object 处于非活动状态。有没有办法通过脚本查找和链接不活动的游戏对象?
解决方法
正如评论中所讨论的,由于您想要实现的是创建一个带有按钮的可重用对话框,这些按钮将触发来自当前 Scene
一部分的其他类的不同功能,因此您可以实现这是通过使用 UnityAction
。
假设您有一个带有 Dialog
函数的 OnButtonClickedAction
脚本:
public class Dialog : MonoBehaviour {
public static UnityAction OnButtonClickedAction;
public void OnButtonClicked(){
if (OnButtonClickedAction != null){
OnButtonClickedAction.Invoke();
}
}
}
并且在您想要显示此对话框的 Scene
中,您应该有一个订阅这些操作的类:
public class Script : MonoBehaviour {
private void OnEnable() {
Dialog.OnButtonClickedAction += CodeToRunOnButtonClick;
}
private void OnDisable(){
Dialog.OnButtonClickedAction += CodeToRunOnButtonClick;
}
private void CodeToRunOnButtonClick(){
// code
}
}
通过这样做,您的 Dialog
可以在不同的 Scene
之间重复使用。
还有另一种使用单例模式的方法,即从 GameObject
调用函数,该函数在更改 Scene
时不会被破坏。假设您有一个不会被销毁的 GameManager
类,因此您可以从 Dialog
脚本中调用类似的东西。
public class Dialog : MonoBehaviour {
public void OnButtonClicked(){
GameManager.Instance.CodeToRunOnButtonClick();
}
}
我更喜欢第一个版本,但这取决于你。
这是 Unity Editor 内部的层次结构:
如您所见,Dialog
中有一个 Scene
对象,该对象附加了 Dialog
脚本,并在 Button
的 onClick
事件上,Dialog
的 OnButtonClicked
方法被赋值。
并且通过将 Script
对象添加到您想要显示此 Dialog/WinPopUp 的每个场景中,您可以像这样监听该动作:
如果您有多个按钮,您可以轻松扩展 UnityAction
以支持为每个 Button
(buttonId
) 添加一个 id 并像这样传递它:>
无功能按钮的一个可能原因可能是现场缺少事件系统。事件系统位于 UI 部分下,与 Canvas 相同。当您在舞台上创建第一个 UI 元素时,它会自动添加。 https://docs.unity3d.com/2018.3/Documentation/Manual/EventSystem.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。