• Unity与CocosCreator对比学习二


    一、锚点与适配

    1.在Creator中

    • 适配通过锚点、位置和Widget达到适配目的;
    • 锚点是节点在其父节点坐标系中坐标对其点,其x,y范围在[0, 1]之间;
      • 锚点为(0, 0)时在节点自身的左下角,节点坐标指其左下角在父节点中的坐标;
      • 锚点为(0.5, 0.5)时在节点自身的中心,节点坐标指其中心在父节点中的坐标;
      • 锚点为(1, 1)时在节点自身的右上角,节点坐标指其右上角在父节点中的坐标。

    注释:下图父节点(红色)锚点为(0, 0)即坐标原点为其左下角

    • 锚点也是节点自身坐标系原点位置;
      • 锚点为(0.5, 0.5)时,其子节点将以其中心点作为坐标原点

    注释:下图中子节点(绿色)锚点为(0, 0),即其左下角

    •  Widget组件用于做作对齐操作(一般是相对于父节点的对齐,以下将均以此叙述)
      • 其上、下、左、右四个对其选项分别代表相对于父节点四个方向的对齐距离;
      • 希望上对齐时只设置top即可;
      • 希望左上角对齐时同时设置top和Left即可;
      • 四个方向都设置时,节点尺寸将根据父节点的尺寸变化以满足Widget的对齐设置。

    2.在Unity

    • 通过锚点和轴心实现对齐;
    • 轴心只代表齐在父节点中的坐标位置点;
      • 当轴心为(0, 0)时,其坐标就是其左下角在父节点中的坐标;
    • 锚点的范围和Creator不同,在Unity中锚点的范围在父节点中;
    • 锚点代表其锚定在父节点中的位置,即其坐标原点位置;
      • 最大最小锚点都为(0, 0)时,代表其坐标原点在其父节点的左下角;
      • 最大最小锚点都为(1, 1)时,代表其坐标原点在其父节点的右上角;

    • 锚点也有对齐作用(类似Creator中的Widget组件)
      • 当最小值和最大值不一样时起到该作用;
      • 最小值的x=0.2代表其左侧相对于父节点横向20%位置的对齐,对齐距离可以再设置;
      • 最大值的x=0.8代表其右侧相对于父节点横向80%位置的对齐,对齐距离可以再设置;
      • 最小、最大值的y也是以此类推。

    注释:下图中最大最小值的x不同,y相同,所以只有子节点的宽度收到左、右对齐值的影响。

    注释:下图中最大的x与最小的x,最大的y与最小的y都不一样,所以子节点尺寸完全受上下左右对齐值影响。

     

    二、通过代码修改位置

    1.在Creator中

    • 节点的position属性代表其在父节点坐标系中的坐标;
    • 【属性检查器】中的position属性与代码中node的position属性是一致的。

    注释:上图中的设置等价于下面的2种代码设置;

    1. // 方法1:
    2. this.node.position = cc.v3(0, 10, 0);
    3. // 方法2:
    4. this.node.x = 0;
    5. this.node.y = 10;
    6. // 注意:下面的方式行不通
    7. this.node.position.x = 0;
    8. this.node.position.y = 10;

    2.在Unity中

    • 【检查器】中的x、y、z代表其在父节点中的坐标;
    • 代码中UI节点的RectTransform的anchoredPosition属性也是父节点中坐标;
    • 代码中UI节点的RectTransform的position属性代表世界空间坐标系中的坐标;
    • 代码中transform.position等价于RectTransform的position属性。

    1. // 获取到节点的RectTransform组件
    2. RectTransform rt = this.GetComponent();
    3. if (rt) {
    4. // 按父节点坐标系修改坐标(既:以当前节点的锚点位置为坐标原点)
    5. rt.anchoredPosition = new Vector2(100, 100);
    6. // 按世界坐标系修改坐标(既:以屏幕左下角为坐标原点)
    7. rt.position = new Vector2(100, 100);
    8. }
    9. // 通过transform按世界坐标系修改坐标
    10. this.transform.position = new Vector2(100, 100);

    三、节点大小修改

    1.在Creator中

    • 在【属性检查器】修改节点的size属性的W和H;
    • 在代码中修改节点的width和height属性;
    • 节点挂载widget组件的话参考上述一、中的内容,可能会影响到大小修改。
    1. // 方法1:
    2. this.node.width = 100;
    3. this.node.height = 100;
    4. // 方法2:
    5. this.node.setContentSize(100, 100);

    2.在Unity中

    • 在【检查器】中修改节点的宽度、高度属性;
    • 在代码中修改RectTransform的sizeDelta属性;
    • 节点的锚点最大值和锚点最小值不同的话也会影响到尺寸设置(【检查器】中会看不到宽度、高度属性)。

    1. RectTransform rt = this.GetComponent();
    2. if (rt) {
    3. rt.sizeDelta = new Vector2(100, 100);
    4. }

     

  • 相关阅读:
    Linux安装haproxy
    Java 设计模式实战系列—单例模式
    花生壳内网穿透+Windows系统,如何搭建网站?
    洛谷P1291 [SHOI2002] 百事世界杯之旅
    Day37 移动端自动化(下)
    java-net-php-python-04海信集团售后管理系统计算机毕业设计程序
    Python字典的增删改查以及嵌套
    C++ 数字
    Lattice库联合ModelSim仿真FIFO
    从阵列导向矢量 steering vector -----> S-V MIMO model
  • 原文地址:https://blog.csdn.net/Nick_Li_/article/details/137386272