【问题标题】:Why my SelectionGrid is not a GameObject visible in Unity Editor?为什么我的 SelectionGrid 不是 Unity 编辑器中可见的游戏对象?
【发布时间】:2015-08-28 10:18:29
【问题描述】:

我只想在一些选项之间创建一个独占的选择。就是这样!

但使用 Unity Editor 似乎非常困难,所以我最终以编程方式创建它:

    static string[] options = new string[] { "Option 0", "Option 1", "Option 2" };
    static Rect position = new Rect(0, 0, 320, 45);
    int selected = 0;

    void OnGUI()
    {
        selected = GUI.SelectionGrid(position, selected, options, options.Length, GUI.skin.toggle);
    }

但是当我玩的时候,SelectionGrid 永远不会出现在 GameObject 层次结构中。 SelectionGrid 是游戏对象吗?可以将它与新的 UI 系统、有用的 Canvas 和锚点一起使用吗?还有其他解决方案吗?

谢谢

【问题讨论】:

    标签: c# user-interface unity3d


    【解决方案1】:

    Unity 旧版 GUI 不会在层次结构上创建 GameObject,也不会为每个 GUI 控件创建 Game 对象,它的概念与基于面向对象编程的普通 UI 有点不同。

    只是为了理解的含义,将 GUI 视为状态机,每个元素(GUI.Button 或 GUI.SelectionGrid)都是将通过单个函数调用进行实例化、定位和处理的组件,您不能将其作为独立对象,因为它更像是 GUI 本身的子机或状态。

    要控制您的 GUI 组件更像对象,您可以通过在单独的 MonoBehaviour 类中编写每个组件或组件集及其属性的脚本并将其附加到空的 GameObjects(因此您甚至可以预制它以重用或以编程方式实例化)来接近。 例如:

    public class MySelectionGridObject extends MonoBehaviour() {
        public Rect orientation;
        public int selectedItem;
    
        OnGUI() {
            selected = GUI.SelectionGrid(orientation, selected, ...);
        }
    }
    

    通过这种方式,您可以通过检查器或在运行时通过实例化游戏对象的组件来操作它,例如:

    MySelectionGrid grid = myGridObjectInstance.GetComponent<MySelectionGrid>(); 
    

    我对你的个人建议是如果您只是学习并且可以使用 Unity 5,那么请选择 NUI(此处为manuallessons)系统,它在 Unity 中简化了很多 UI 构建。如果您无法将 Unity 升级到支持 NUI 的版本,或者您正在处理已经在旧版 GUI 上制作的项目,请选择旧版 GUI(此处为 manualreferences)。 独立于您的选择,以正确的方式学习它,阅读文档并尝试在开始对您的项目进行大量编码之前了解它是如何工作的(相信我,在没有很好理解其逻辑的情况下使用 GUI 可能会在您的项目,如果您在意识到之前创建了大量代码,您将需要进行大量繁琐的重构)。 Unity 有很多视频教程和可靠的文档,可以通过示例来学习 API 的基础知识;)

    【讨论】:

    • 好吧,如果我理解的话,NUI 是 Unity5 中引入的新 UI 系统。如果我是对的,自从我开始学习 Unity5 以来,它是我所知道的唯一 UI 系统,这解释了为什么我迷失了 GUI。
    • 终于找到了! ToggleGroup 是我正在搜索的内容:docs.unity3d.com/Manual/script-ToggleGroup.html 也许您应该在回答中提及它:) 无论如何,非常感谢您的解释。
    • 是的,你明白了! ToogleGroup 是一个 UI(或通常称为 NUI 或新 UI)组件,而 SelectionGroup 是一个遗留的 GUI 组件。两种不同的 API。很高兴这个答案能帮到你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多