我想知道是否可以使用unity IDE设计一个带有UI元素(按钮,标签等)的面板,然后生成一个描述该面板的C#类。
例如,在Visual Studio中,使用Windows窗体设计器将自动生成Form.Designer.cs文件。在此文件中,声明并初始化表单上的所有UI项目并设置其属性。如何在统一中实现同样的目标?
答案 0 :(得分:3)
由于UI元素是"只是" GameObjects的组件,是的,您可以使用脚本创建它们。
但是"更好"想法是使用已经配置的组件来实例化Prefabs,您只需要更改一些值并放置元素。
请参阅Unity的文档,了解该主题:
https://docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html
UNITY 5.4
从脚本
创建UI元素如果您要创建一个动态UI,其中UI元素根据用户操作或游戏中的其他操作显示,消失或更改,您可能需要创建一个基于自定义逻辑实例化新UI元素的脚本。
创建UI元素的预制件
为了能够轻松地动态实例化UI元素,第一步是为您希望能够实例化的UI元素类型创建预制件。按照您希望它在场景中查看的方式设置UI元素,然后将元素拖动到项目视图中以使其成为预制件。
例如,按钮的预制件可以是具有图像组件和按钮组件的游戏对象,以及具有文本组件的子游戏对象。根据您的需要,您的设置可能会有所不同。
您可能想知道为什么我们没有API方法来创建各种类型的控件,包括视觉效果和所有内容。原因是存在无数的方式,例如可以设置一个按钮。它是使用图像,文本还是两者兼而有之?也许甚至多个图像?文本字体,颜色,字体大小和对齐方式是什么?图像应该使用哪些精灵或精灵?通过让您制作预制件并实例化它,您可以按照您想要的方式进行设置。如果您以后想要更改UI的外观,您可以更改预制件,然后它将反映在您的UI中,包括动态创建的UI。
实例化UI元素
使用Instantiate方法将UI元素的预制件正常实例化。设置实例化UI元素的父元素时,建议使用Transform.SetParent方法并将worldPositionStays参数设置为false来执行此操作。
定位UI元素
UI元素通常使用其Rect变换定位。如果UI元素是布局组的子元素,它将自动定位,并且可以跳过定位步骤。
当定位Rect变换时,首先确定它是否具有或应该具有任何拉伸行为是有用的。当anchorMin和anchorMax属性不相同时,会发生拉伸行为。
对于非拉伸矩形变换,通过设置anchoredPosition和sizeDelta属性可以最轻松地设置位置。 anchoredPosition指定枢轴相对于锚点的位置。 sizeDelta与没有伸展时的大小相同。
对于拉伸Rect变换,使用offsetMin和offsetMax属性设置位置可能更简单。 offsetMin属性指定rect的左下角相对于左下锚点的角。 offsetMax属性指定rect的右上角相对于右上角锚点的角落。
自定义UI元素
如果您动态地实例化多个UI元素,那么您不太可能希望它们看起来都一样并且执行相同的操作。无论是菜单中的按钮,库存中的项目还是其他内容,您都可能希望单个项目具有不同的文本或图像,并在与之交互时执行不同的操作。
这是通过获取各种组件并更改其属性来完成的。请参阅图像和文本组件的脚本参考,以及如何从脚本编写UnityEvents。