为什么我的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系统,有用的画布和锚?还有其他解决方案吗?
谢谢
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的基础知识;)