Anchor适应性设置
1.通过自定义锚点四个花瓣的位置,可以实现让子物体根据父物体的缩放,进行等比例的缩放,从而实现UI的适配
2.问题:在项目中一般是采取什么方式进行适配的,是否有什么规定,或者UI适配结果的便捷检测方式
Anchor适应性设置
1.通过自定义锚点四个花瓣的位置,可以实现让子物体根据父物体的缩放,进行等比例的缩放,从而实现UI的适配
2.问题:在项目中一般是采取什么方式进行适配的,是否有什么规定,或者UI适配结果的便捷检测方式
Anchors应用
1.锚点(对齐方式)是物体针对父物体的对齐方式,pos信息是当前UI的Anchors与Pivot的相对距离
2.点击center模式,将会显示当前UI的Pivot,点击Pivot模式,将能改变当前UI的Pivot
3.Anchor应用,主要是进行UI的适配
4.合理使用UI的组件,降低代码复杂度
transform组件介绍
1.无法移除的基础组件
2.Rect transform(类似transform组件的子类)
3.属性Width Height(单位:像素)
4.UI组件在关闭其他具备显示信息的组件后,剩下一个透明的框,称为Panel
5.实际上所有UI组件都是基于Panel的,Panel是当前UI的区域
6.Anchors(锚点)Panel中带4个花瓣的点
7.Pivot(轴心点) Panel的中心点
8.组件的位置是通过Pivot(中心点)来确定
9.Inspector显示可以切换为Debug,方便查看UI属性
课程主要内容:
1.基础组件介绍
2.基础组件示例
3.拓展组件(UGUI)
4.图文混排
5.图表(UGUI)
6.多语言方案
7.优化(UI)
实现拖动的另一种方式:
继承IDragHandler接口,实现OnDrag方法。具体代码如下:
public class Test3 : MonoBehaviour,IDragHandler {
// Use this for initialization
void Start () {
}
public void OnDrag(PointerEventData eventData)
{
var rect = transform.GetComponent<RectTransform>();
rect.anchoredPosition += eventData.delta;
}
}
有时候Delta会很大,图片跟随不够
UI跟随屏幕整体缩放
上一章节的内容不经常使用。
这个代码回头再看看
UGUI实现事件的三种方式:
第一种使用继承特定事件的接口的方式。
第二种是使用手动在面板里添加的方式。
第三种是使用代码泛型动态的添加方式。
这个组件里的宽高必须成对出现。不然子物体会消失。
DropDown
public class SliderTest : MonoBehaviour {
// Use this for initialization
void Start () {
StartCoroutine(ChangeValue());
}
private IEnumerator ChangeValue()
{
Slider slider = GetComponent<Slider>();
float process = 0;
while (process < 1) {
process += 0.1f;
yield return new WaitUntil(() =>
{
slider.value = Mathf.SmoothStep(slider.value, process, 0.5f);
return process - slider.value <= 0.01f;
});
}
}
}
使Slider实现进度条的功能。
因为进度条进行的不光滑,所以还需要改进。
public class SliderTest : MonoBehaviour {
// Use this for initialization
void Start () {
StartCoroutine(ChangeValue());
}
private IEnumerator ChangeValue()
{
Slider slider = GetComponent<Slider>();
float process = 0;
while (process < 1) {
process += 0.1f;
yield return new WaitUntil(() =>
{
slider.value = Mathf.SmoothStep(slider.value, process, 0.5f);
return process - slider.value <= 0.01f;
});
}
}
}
Slider
fill属性是滑动过的位置。
handle是圆圈。
toggleGroup应用还是不太懂
Toggle里面的属性isOn只要发生改变,其事件就会响应。
可以在代码中编写事件。这种类型的代码我还是第一次见。
这种方式是lambda表达式。
public class Test2 : MonoBehaviour {
// Use this for initialization
void Start () {
GetComponent<Toggle>().onValueChanged.AddListener((value)=>Debug.Log(value));
}
// Update is called once per frame
void Update () {
}
}
UI交互基类 Selectable组件。
Disabled Color和interactable一起使用。去掉interactable就显示Disabled Color。
注意:做UI动画一般使用DoTween来实现。而不使用Animation,因为Animation太死板了。
重点避免使用Mask遮罩!
parent是child的字物体。
parent是大一点的图,child是小一点的图。
然后在child身上添加Mask脚本。
为什么要极力避免使用它呢,因为它会影响性能,在game窗口的性能里面,它会增大setpass call
可以使用Rect Mask 2D脚本或者自己
Text中富文本的使用。
它可以让文字框内的文字有些是绿的,有些是蓝色的,有些大,有些小这种效果。这种效果而不采用好几个Text去拼,因为这样后期自适应的时候工作量很大。
富文本有些像html标签。对字体进行限定。
如果Canvas使用的RenderMode是overlay的话,那么3维物体是无法显示到UI之上的,如果项目做了很多了,这时候再改模式的话会出现很多问题.
这时候使用RayImage解决比较好。
在main camera的inspector参数面板中的target texture,在文件夹新建一个render Texture,然后复制给target texture。这时相机所渲染的东西都会出现在target texture上。然后把target texture赋值给Raw Image的Texture属性上。
这样就可以把3D物体渲染到2D页面上。
最后把main camera的参数Clear Flags改成solid color就可以了。
在UV Rect属性那个位置设置图片的宽w,高h。保证只能容纳一张图片。
然后调整代码,使这张图片动画循环播放。
private IEnumerator Ani()
{
float x = 0;
float y = 0;
while (true) {
y += _offsetY;
while (x<1) {
x += _offsetX;
_rawImage.uvRect = new Rect(x, y,_rawImage.uvRect.width,_rawImage.uvRect.height);
yield return new WaitForSeconds(0.3f);
}
x = 0;
}
}