为什么我的SelectionGrid在Unity编辑器中不是一个可见的GameObject

本文关键字:一个 GameObject SelectionGrid 我的 Unity 编辑器 为什么 | 更新日期: 2023-09-27 18:10:17

我只想在一些选项之间创建一个排他性选择。就是这样!

但是使用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系统,有用的画布和锚?还有其他解决方案吗?

谢谢

为什么我的SelectionGrid在Unity编辑器中不是一个可见的GameObject

Unity遗留GUI不会基于层次结构创建GameObject,也不会为每个GUI控件创建Game object,其概念与基于面向对象编程的普通UI略有不同。

只是为了理解GUI的意义,将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, ...);
    }
}

这样你就可以通过检查器操作它,或者在运行时通过实例化gameObject的组件来操作它,比如:

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

我对你的个人建议是:如果你只是在学习并且可以使用Unity 5,那么就去使用NUI(手册和课程)系统,它简化了Unity中的许多UI构建。如果你不能将Unity升级到具有NUI支持的版本,或者你正在开发一个基于旧GUI的项目,那么就使用旧GUI(手册和参考)。独立于你的选择,学习它的正确方式阅读文档,并试图理解它是如何工作的,然后开始在你的项目编码(相信我,使用GUI没有很好地理解它的逻辑可能绑定一个巨大的性能问题,在你的项目,如果你创建了大量的代码之前意识到这一点,你将有很多繁琐的重构要做)。Unity有很多视频教程和可靠的文档遵循做例子来学习api的基础知识;)