UI框架基本知识

UI框架

1 功能

①管理场景中所有的面板

②控制面板之间的跳转

2 屏幕自适应:

 

UI Scale Mode—Scale With Screen Size

Matchwidth1时根据宽度Size变化,height1时根据高度Size变化。

其它根据值的大小判定高度宽度对Size变化影响的大小。

补充:

Render Mode属性

Screen Space-Overlay:是屏幕空间-覆盖,这个模式始终将UI放到场景最上面渲染,但是当有多个Canvas时就需要根据Sort Order来计算前后关系,这个值越大越靠前,即值越大越显示在前面,值小的在后面。Pixel Perfect表示是否需要打开抗锯齿。

Screen Space-Camera:是屏幕空间-相机,这个模式需要指定一个渲染相机,Plane Distance指定了UI与该相机的距离,越近越显示在前面。Sorting layer则指定了相机的渲染顺序,Order in Layer值越大,该UI越显示在前面。值越小越靠后。所以Sorting layer只有在有多个同类型Sorting Layer时才有效。如果两个Canvas指定的Sorting Layer一样,则依据Order in Layer的值的大小决定先后顺序。如果Sorting Layer不一样,则Order in Layer值无意义,此时会根据Sorting Layer里面值的顺序来决定,值越大显示越靠前。

World Space:是世界空间。也需要指定渲染相机,Sorting LayerOrder in Layer的处理与屏幕空间相机一样。

 

Canvas Scaler主要负责屏幕适配,Canvasrender modeScreen Space-Overlay或者Screen Space-Camera,可以指定UI Scale Mode,有三种模式:

Constant Pixel Size:保持UI的像素大小无论屏幕大小如何改变。Scale Factor指定几倍像素。

Scale With Screen Size:随着屏幕的大小改变而等比缩放UI大小。然后就是设置标准长宽。Reference Pixel Per Unit:如果sprite设置了一个单元的像素值,这里设置的值将被spritePixel per unit值覆盖。也就是说如果sprite设置Pixel per unit100,这里如果设置为200,那么在这个Canvas下面的sprite如果Set Native Size的话,长宽均会X2.

Constant Physical Size根据物理单位来进行缩放暂时不会使用。

 

Rect Transform 看到标签已经变成PosX,Top,PosZ,Width,Bottom.PosX指定了Image中心点到锚点这条线的距离,Top指定了中心点到锚点最上方的距离,Bottom指定了中心点到锚点最下方的距离,Width指定了Image本身的宽

Raycast TargetUI事件会在EventSystemUpdateProcess触发。UGUI会遍历屏幕中所有RaycastTargettrueUI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件给逻辑层去响应。

有的图片不需要响应,开发人员没有取消勾选,如果RaycastTarget被勾选过多的话,

效率必然会低。

 

MaskableGraphicUGUI的核心组件,它继承自GraphicMaskableGraphic是一个抽象类,它的派生类有RawImageImageText。顾名思义,MaskableGraphic是可遮罩的图像。

可以表示UI的各种类型的物体。

 

3 c# serializable

作用将对象转换为容易传输的格式的过程。使用时,反序列化根据流重新构造对象。

使用序列化的原因:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。

 

unity中,序列化一直是个很头疼的问题,尽管官方支持了许多类型,但一些自定义类型和常用,比如Dictionary不能序列化,让人大呼头疼。不过幸运的是,ISerializationCallbackReceiver的出现解决了这个问题。

编写一个类继承ISerializationCallbackReceiver接口,通过编写2个回调让List类型代替Dictionary参与序列化

 

4 Dictionary

要使用Dictionary集合,需要导入C#泛型命名空间

 System.Collections.Generic(程序集:mscorlib

 

 Dictionary的描述

1、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成

2、任何键都必须是唯一的

3、键不能为空引用nullVB中的Nothing),若值为引用类型,则可以为空值

4KeyValue可以是任何类型(stringintcustom class 等)

 

 Dictionary常用用法: key 的类型为 int , value的类型为string 为例

 1、创建及初始化

Dictionary<int,string>myDictionary=newDictionary<int,string>();

 

 2、添加元素

myDictionary.Add(1,"C#");          myDictionary.Add(2,"C++");

myDictionary.Add(3,"ASP.NET");myDictionary.Add(4,"MVC");

 

 3、通过Key查找元素

if(myDictionary.ContainsKey(1))

{

Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);

 }

 

 4、通过KeyValuePair遍历元素

foreach(KeyValuePair<int,string>kvp in myDictionary){

Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value);}

 

5、仅遍历键 Keys 属性

Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys;

foreach(int key in keyCol)

{

Console.WriteLine("Key = {0}", key);

}

 

6、仅遍历值 Valus属性

Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values;

foreach(stringvalueinvalueCol){

Console.WriteLine("Value = {0}", value);}

 

7、通过Remove方法移除指定的键值

myDictionary.Remove(1);

if(myDictionary.ContainsKey(1))

{

Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);

}

else

{

Console.WriteLine("不存在 Key : 1"); 

 }

 

 

 

 

 

 

 

 

 

 

 

其它常见属性和方法的说明

 

 

  Comparer           获取用于确定字典中的键是否相等的 IEqualityComparer

 

  Count                  获取包含在 Dictionary中的键/值对的数目。

 

  Item                    获取或设置与指定的键相关联的值。

 

  Keys                   获取包含 Dictionary中的键的集合。

 

  Values                获取包含 Dictionary中的值的集合。

 

  Add                    将指定的键和值添加到字典中。

 

  Clear                  Dictionary中移除所有的键和值。

 

  ContainsKey      确定 Dictionary是否包含指定的键。

 

  ContainsValue   确定 Dictionary是否包含特定值。             

 

  GetEnumerator  返回循环访问 Dictionary的枚举数。

 

  GetType             获取当前实例的 Type。 (从 Object 继承。)

 

  Remove             Dictionary中移除所指定的键的值。

 

  ToString             返回表示当前 ObjectString。 (从 Object 继承。)

 

  TryGetValue      获取与指定的键相关联的值。

 

 

 

 

 

 

Enum.Parse()方法

这个方法带3个参数,第一个参数是要使用的枚举类型。其语法是关键字typeof后跟放在括号中的枚举类名。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enum.Parse()方法实际上返回一个对象引用——我们需要把这个字符串显式转换为需要的枚举类型(这是一个取消装箱操作的例子),也就是强制转换。

 

字典扩展

/// <summary>/// 尝试将键和值添加到字典中:如果不存在,才添加;存在,不添加也不抛导常/// </summary>

public static Dictionary<TKey, TValue> TryAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value)//需要使用字典,两个参数,返回的是词典

{

    if (dict.ContainsKey(key) == false) dict.Add(key, value);

    return dict;

}

/// <summary>/// 将键和值添加或替换到字典中:如果不存在,则添加;存在,则替换/// </summary>
public static Dictionary<TKey, TValue> AddOrReplace<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value)//需要使用字典,两个参数,返回的是词典

{

    dict[key] = value;

    return dict;

}

 

使用:

dict.TryAdd(2, "Banana");

dict.AddOrReplace(3, "Orange");

 

 

public static TValue TryGet<TKey,TValue>(this Dictionary<TKey,TValue>dict,TKey key)

    {

        TValue value;

        dict.TryGetValue(key,out value);

        return value;

}

//需要使用字典,一个参数key,返回的是value

 

BasePanel panel = panelDic.TryGet(panelType);

Canvas Group

可以通过Canvas Group影响该组UI元素的部分性质,而不需要费力的对该组UI下的每个元素逐个调整。Canvas Group是同时作用于该组UI下的全部元素。

参数
Alpha:该组UI元素的透明度。需要注意,每个UI最终的透明度是由此值和自身的alpha数值相乘得到。
Interactable:是否需要交互(勾选则可交互),同时作用于该组全部UI元素
Blcok Raycasts:如果需要图形射线(GraphicRaycaster)检测。勾选后,可将此组件作为一个射线碰撞盒。注意,不适用于Physics.Raycast
Ignore Parent Groups:是否需要忽略父级对象中的CanvasGroup的设置。(勾选则忽略)

补充:
CanvasGroup的典型应用方式:
1.通过调整CanvasGroupAlpha可以控制改组UI的淡入淡出
2.不勾选Interactable,可设置某个UI对象的所有子对象都不参与交互
3.通过设置Blcok Raycastsfalse,可以使UI不阻挡鼠标(点击)事件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值