Unity 探索 -- UI 篇
最近又开始使用 Unity 引擎,以前学习都是囫囵吞枣的一下全吞下去。基本都忘了,既然又开始使用 Unity ,那么就系统的学习一下。
仅记录 不同的、易忘记 的部分,以及 不好理解 的部分
Unity UI 模块探索
UI 模块基础
- UI 中的层的顺序影响图层的顺序
- Rect Transform
Rect Transform 设置面板Rect Transform 是所有 UI 的最基础的组件,合理的利用约束布局,会使创建的 UI 有很强的适应性。
代码控制 Rect Transform:
//Rect Transform 继承自 Transform
//常用的数据
// Use this for initialization
void Start()
{
ResizeWithParent(m_text.gameObject.GetComponent<RectTransform>()
,new Vector2(10,20),new Vector2(30,40));
}
/// <summary>
/// 根据父节点调整位置
/// </summary>
/// <param name="tran">本节点</param>
/// <param name="leftBottom">左、下的边距</param>
/// <param name="RightTop">右、上的边距</param>
public void ResizeWithParent(RectTransform tran, Vector2 leftBottom, Vector2 RightTop)
{
tran.anchorMin = new Vector2(0, 0);
tran.anchorMax = new Vector2(1, 1);
tran.offsetMin = leftBottom;
tran.offsetMax = RightTop;
}
以上代码结果:
void Start()
{
ResizeHeightWithParentTopEdge(m_text.gameObject.GetComponent<RectTransform>()
, 60);
}
/// <summary>
/// 根据父节点的顶部,调整宽度
/// </summary>
/// <param name="tran">本节点</param>
/// <param name="height">高度</param>
public void ResizeHeightWithParentTopEdge(RectTransform tran, float height)
{
tran.pivot = new Vector2(0, 1);
tran.anchorMin = new Vector2(0, 1);
tran.anchorMax = new Vector2(1, 1);
tran.offsetMin = new Vector2(0, -height);
tran.offsetMax = new Vector2(0, 0);
}
以上代码的结果:注意 tran.offsetMin = new Vector2(0, -height);
符号是负的。
Text
Text 设置面板Text 只能显示有限的文字,超出显示范围的文字不会显示滑动条
Text 完整 API 参考:https://docs.unity3d.com/ScriptReference/UI.Text.html
常用代码相关操作:
public Text m_text;
/// <summary>
/// 设置 Text 的字体相关信息
/// </summary>
/// <param name="fontName">字体的名字</param>
/// <param name="fontSize">字体的大小</param>
/// <param name="fontStyle">字体的风格</param>
public void setFont(string fontName,int fontSize, FontStyle fontStyle)
{
m_text.font = new Font(fontName);
m_text.fontSize = fontSize;
m_text.fontStyle = fontStyle;
}
/// <summary>
/// 获取 Text 的文本
/// </summary>
/// <returns></returns>
public string getText()
{
return m_text.text;
}
/// <summary>
/// 设置显示的文本
/// </summary>
/// <param name="text">需要显示的文本</param>
public void setText(string text)
{
m_text.text = text;
}
Image
Image 设置面板Image 的可设计的属性较少,如果需要调整图片大小,需要修改 Rect Transform 的属性
添加图片之后,设置选项会增加
Image 设置面板 // Update is called once per frame
void Update()
{
CoolTime(Image.FillMethod.Radial360, 5);
}
/// <summary>
/// 冷却时间的环
/// </summary>
/// <param name="fillMethod">填充方式</param>
/// <param name="fillOrigin">起始轴 0,1,2,3 (n % 4)分别表示下、右、上、左</param>
public void CoolTime(Image.FillMethod fillMethod, int fillOrigin)
{
m_image.fillMethod = fillMethod;
m_image.fillOrigin = fillOrigin;
if (m_image.fillAmount > 0)
{
m_image.fillAmount -= 0.01f;
}
else
{
m_image.fillAmount = 1;
}
}
代码运行后结果:
运行后的结果 运行后的结果Raw Image
Raw Iamge 设置面板Raw Image 也就是 Image 的缩水版。
代码详细参考:https://docs.unity3d.com/ScriptReference/UI.RawImage.html
Button
Button 一般直接设置好就行了,代码里面用的较多的也就是 Click 事件的编写。
Button 的 Transition 属性分为四种:None、Color Tint、Sprite Swap、Animation
四种模式- None:什么都没有。
- Color Tint:状态变化体现在颜色变化上。
- Sprite Swap:通过更换图片来体现不同的状态
- Animation:配合 Animation 模块来体现不同的状态。(很强大,可以实现很平滑的动画)
Toggle
Toggle 设置面板Toggle 也就是 Button 的加强版。跟 Button 对比,Toggle 多了一个显示状态的图片,以及多了一个状态值
is on
- Group:在同一个组里的 Toggle 同时只能激活一个。
- Graphic:当 Toggle 在 off 状态时,Toggle.graphic 的 alpha 等于零。
Slider
Slider 设置面板Slider 去掉 Interactable 可是用来制作进度条、血条、或者技能读条之类的东西。
代码详细参考:https://docs.unity3d.com/ScriptReference/UI.Slider.html
Scrollbar
Scrollbar 也就是 Slider 的同素异形体(借用化学名来理解
_(:3 」∠ )_
)。
- 适用于根据内容来变化的滚动条之类的东西。
代码详细参考:https://docs.unity3d.com/ScriptReference/UI.Scrollbar.html
Dropdown
Dropdown 设置面板由 一个 Dropdown 脚本加上一个 Template(下拉模板) 组合在一起
public Dropdown m_dropdown;
// Use this for initialization
void Start()
{
SetOptions();
}
/// <summary>
/// 把选项设置成 0 - 10
/// </summary>
public void SetOptions()
{
m_dropdown.options.Clear();
List<Dropdown.OptionData> dropList = new List<Dropdown.OptionData>();
for (int i = 0; i < 10; i++)
{
Dropdown.OptionData item = new Dropdown.OptionData(i.ToString());
dropList.Add(item);
}
m_dropdown.AddOptions(dropList);
}
/// <summary>
/// 在 console 输出选项的序号(非内容)
/// </summary>
public void getValue()
{
Debug.Log(m_dropdown.value);
}
结果:
结果图 结果图 结果图Input Field
Input Field 设置面板Input Field 由两个子 Text 组成,其中 Placeholder 显示提示的文本,Text 显示输入的文本。
- Content Type 可以设置输入的类型
- Line Type 可设置成处理多行输入
代码处理:
public InputField m_inputField;
/// <summary>
/// 结束时,获取输入的文本
/// </summary>
public void InputOver()
{
Debug.Log("Input over and the string is : " + m_inputField.text);
}
结果图:
结果图由于显示只显示两行,所以后面的文字没有显示出来,但实际上已经获取到了。
Canvas
Root Canvas 设置界面非 Root Canvas 不能启用 Canvas Scaler 脚本,主要用于做 UI 的根节点。
Panel
Panel 也就是一个包含 Image 组件的面板,没有专门的设置面板,一般用于管理包含在其节点下的子物体。
Scroll View
Scroll View 设置面板默认 Scroll View 有一个 Viewport 用来记录显示窗口的内容,另外有两个 Scrollbar,分别表示横着的,和竖着的滚动条。其中 Viewport 中的Mask 组件是用来确定内容的显示的范围的。
Event System
Event System 设置面板与输入有关的设置