UGUI系统
简介
UGUI是比较主流的一种UI解决方案,主要是用于制作游戏UI(Runtime),一般不用于编辑器界面的开发。是一套基于GameObject和Component的UI,控件在场景中像普通游戏对象一样所见即所得,使用的命名空间是UnityEngine.UI,在目前的官方文档中,已经没有这个命名空间了,在旧版的API文档中,还是有这个命名空间的,2017.4版本就有。应该是因为Unity有了新的UI解决方案,将UGUI单独分成了一个Unity的Package,打开Package Manager,可以看到安装了Unity UI这个包,这就是UGUI的包,这个包的名称是com.unity.ugui@1.0(好像就没有更新过),其对应的命名空间就是UnityEngine.UI,所以UGUI的文档也单独拿出来了。可以单独找到这个Package的文档。
轴心和锚点
事件
绑定委托吧,具体有哪些委托查文档
不是直接使用的委托,应该是有一层包装
void Start()
{
m_MainButton = GetComponent<Button>();
if(m_MainButton != null)
{
m_MainButton.onClick.AddListener(OnClickMe);
}
}
void OnClickMe()
{
}
顺序
首先UGUI中的组件都是作为GameObject存在的,所以有个Z值,这个Z值是有用的但是优先级比较低。
UGUI中是如何确定渲染顺序的:
不同Camera的Depth(大在前,小在后)
同Camera的SortingLayer(下在前,上在后)
同SortingLayer下的Order in Layer(大在前,小在后)
同Order in Layer下的Z轴(小在前,大在后)
Canvas
Render Mode属性
Screen Space - Overlay:在照片上直接贴膜(UI在最高层)
Screen Space - Camera:在相机前贴膜(UI可能在普通3D物体之后)
World Space:当成一个普通物体渲染
Canvas Scaler组件
外链资料
零散
我的理解:使用UGUI创建UI后,UI元素在游戏场景中非常大,这是因为UGUI本身就是设计为基于GameObject的框架,UI元素在场景中作为GameObject存在,直接可见,而又为了和普通的游戏对象区分开,所以才这么大。
Canvas是必需元素,UI控件只有作为Canvas的子物体才能被看见。在场景中创建Canvas的时候,如果没有EventSystem则会自动创建一个EventSystem;在场景中创建UI控件的时候,如果没有Canvas则会自动创建一个Canvas,作为UI控件的父对象,如果场景中本来就有Canvas,则新的UI控件也会自动成为已经存在的Canvas的子对象。
一个Button如果没有Image Component,或者Image的Raycast Target是关掉的,那这个按钮无法响应点击事件;另一方面,如果这个Button的子GameObject有Raycast Target选项并且是打开的,那么点击子GameObject所对应的面积还是可以触发Buton的点击事件的。哪些Component可以是Raycast Target呢?应该是负责显示内容的Component,有显示面积的。
UI和游戏的遮挡关系:没有UI不会遮挡住游戏画面,有UI是Raycast的就会遮挡住游戏画面(UI可以交互,游戏逻辑不会收到鼠标事件),那么如果有可以交互的UI的同时,需要鼠标事件仍然可以传递给游戏的话,应该怎么做呢?这样的需求常见吗?
GameObject(非UI)都应该有Transform,UI对象都应该有Rect Transform,创建游戏对象的时候,根据是不是在Canvas下面创建的会自动添加Transform或者Rect Transform,当然这个时候把UI对象移出Canvas,或者把普通游戏对象移入Canvas,组件也不会变化,虽然可以这样做但是没有什么意义。
UGUI中的渲染的遮挡顺序是根据Hierarchy中,物体的前后关系来决定的。