我只想在某些选项之间创建一个独家选择。就是这样!
但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是GameObject吗?可以在新的UI系统中使用它,使用有用的Canvas和锚点吗?还有其他解决方案吗?
由于
答案 0 :(得分:2)
Unity遗留GUI不会在层次结构上创建GameObject,也不会为每个GUI控件创建一个Game对象,它的概念与基于面向对象编程的常见UI略有不同。
只是为了理解的意义将GUI视为状态机,每个元素(GUI.Button或GUI.SelectionGrid)是将通过单个函数调用实例化,定位和处理的组件,并且您无法将其作为一个操作独立对象,因为它更像是GUI本身的子机或状态。
控制GUI组件更像是对象,您可以通过在分离的MonoBehaviour类中编写每个组件或组件及其属性的脚本来处理它们,并将其附加到空GameObjects(因此您甚至可以预先重新设置它以重用或以实例方式实例化)。 例如:
Button
这样你可以通过检查员或在运行时通过实例化gameObject的组件来操纵它,如:
public class MySelectionGridObject extends MonoBehaviour() {
public Rect orientation;
public int selectedItem;
OnGUI() {
selected = GUI.SelectionGrid(orientation, selected, ...);
}
}
我的个人建议是: 如果您只是在学习并且可以使用Unity 5,那么请转到NUI(此处为manual和lessons)系统,它简化了Unity中的大量UI构建。如果您无法将Unity升级到支持NUI的版本,或者您正在使用已在旧版GUI上创建的项目,那么请转到旧版GUI(manual和references)。 独立于您的选择,以正确的方式学习阅读文档,并在开始对项目进行大量编码之前尝试理解它的工作原理(相信我,使用GUI而不理解其逻辑可能会导致巨大的性能问题你的项目,如果你在实现它之前创建了很多代码,你将需要进行大量繁琐的重构)。 Unity有很多视频教程和可靠的文档,可以通过示例来学习API的基础知识;)