微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity:在 Unity 中制作界面的最佳方式

如何解决Unity:在 Unity 中制作界面的最佳方式

对于我的 Android 游戏,我需要制作一个弹出界面窗口,该窗口应该在关卡完成时出现。这样做的最佳方法是什么?

更新 2:有效!我使用的最终版本:

脚本

enter image description here

层次结构

enter image description here

剩下的唯一事情就是在获胜条件为真时将 Dialog 游戏对象 设置为活动状态。它是在我的 GameManager 脚本 中完成的。因此,在每个场景中,我必须手动将 Dialog object 拖到 GameManager scriptDialog 变量 上,所以它可以改变 Dialog object。我尝试在 DialogStart() 方法获取(查找)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 内部的层次结构:

enter image description here

如您所见,Dialog 中有一个 Scene 对象,该对象附加了 Dialog 脚本,并在 ButtononClick 事件上,DialogOnButtonClicked 方法被赋值。

并且通过将 Script 对象添加到您想要显示此 Dialog/WinPopUp 的每个场景中,您可以像这样监听该动作:

enter image description here

如果您有多个按钮,您可以轻松扩展 UnityAction 以支持为每个 Button (buttonId) 添加一个 id 并像这样传递它:>

enter image description here

enter image description here

,

无功能按钮的一个可能原因可能是现场缺少事件系统。事件系统位于 UI 部分下,与 Canvas 相同。当您在舞台上创建第一个 UI 元素时,它会自动添加。 https://docs.unity3d.com/2018.3/Documentation/Manual/EventSystem.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。