《从Cocos到Unity》- 4.UI-屏幕适配

本期涉及到的Cocos知识点

1.Cocos中的Canvas组件和Camera组件
2.Cocos中的屏幕适配原则FixedWidth和FixedHeight

创建Canvas和Camera节点

1.首先新建一个空的Scene。将场景上所有元素删除掉。留下一个空白的场景

2.右键创建一个Canvas节点,接着在Canvas下创建一个Camera节点。这样子目前的场景就类似于Cocos的空场景了。


带有Canvas的空场景

3.选中Canvas节点。
(1)将Canvas 组件上的 Render Mode设置为Screen Space - Camera
(2)将Canvas 组件上的Render Camera设置为我们刚刚创建的Camera(用Cocos的拖拽方式即可)
(3)将Canvas Scaler 组件上的UI Scale Mode 设为Scale With Sceen Size
(4)将Canvas Scaler 组件上的 Reference Resoultion 设置为我们需要的设计分辨,比如说 1080 x 1920
(5)将Canvas Scaler 组件上的 Sceen Match Mode 设置为 Match Width or Height
(6)Canvas Scaler组件上的Match是一个进度条。最左边是Width,最右边是Height。如果你滑动到最左边,那么就是Cocos里的FixedWidth, 如果滑动到最右边的就是Cocos里的FixedHeight。这里我们设置成FixedWidth

Canvas节点的属性设置如下

4.选中Camera节点
(1)将Camera 组件上的 Clear Flags 设置为 Skybox。(这点和Cocos类似)
(2)将Camera 组件上的 Culling Mask 设置为 UI。(这点和Cocos类似)
(2)将Camera 组件上的 Projection 设置为 Orthographic。(设置成正交视图)
(3)将Camera 组件上的 Size 设置为 1080。(因为本例子中设置的设计分辨率为1080 x 1920 并且为FixedWidth,其实这个属性值可以不设置,并有影响游戏运行)
(4)将Camera 节点的位置,设置为0,0, -100(这点很重要,不然摄像机照不到画布上)

设置Camera组件的属性

5.我们观察 Canvas节点Rect Transform 里的 Width 和 Height属性。可以看到现在Canvas的Size确实符和Cocos里的FixedWidth的效果。同时,我们也可以创建一个Image节点,通过切换Game视图的分辨率,观察不同分辨率下,这个Imag的大小和位置是否符合Cocos 的 FixedWidth的特性

多试试不同的分辨率下的效果

6.接着,我们拖动摄像机的位置,让其不在屏幕正中间。
(1)摄像机也能像Cocos的一样,渲染出部分的场景。这点和Cocos一样
(2)缩放摄像机,无法让UI界面也缩放。这点和Cocos不一样

getVisibleSize

Unity没有cocos类似的View.getVisibleSize()的函数,所以我们需要自己包装一层。

using UnityEngine;
using System.Collections;

namespace cc
{
    public class View
    {
         public enum ResoultionPolicy {
            FixedWidth,
            FixedHeight
        };

        public static float ResoultionWidth = 1080;
        public static float ResoultonHeight = 1920;
        public static ResoultionPolicy resoultonPoily = ResoultionPolicy.FixedWidth;

        /**
         * 获取到Cocos里类于visibleSize
         */
        static public Vector2 getVisbleSize()
        {
            float realWidth = Screen.width;
            float realHeight = Screen.height;
            Vector2 v2 = new Vector2();
            if (resoultonPoily == ResoultionPolicy.FixedWidth)
            {
                float scaler = realWidth / ResoultionWidth;
                float visibleHeight = realHeight / scaler;
                v2.x = ResoultionWidth;
                v2.y = visibleHeight;
            }
            else
            {
                float scaler = realHeight / ResoultonHeight;
                float visibleWidth = realWidth / scaler;
                v2.x = visibleWidth;
                v2.y = ResoultonHeight;
            }

            return v2;
        }


        /**
         * 获取到转换到了visibleSize下的safeArea
         */
        static public Rect getVisbleSafeArea()
        {
            Rect rect = Screen.safeArea;
       
            if (resoultonPoily == ResoultionPolicy.FixedWidth)
            {
                float realWidth = Screen.width;
                float scaler = ResoultionWidth / realWidth;
                rect.width *= scaler;
                rect.height *= scaler;
                rect.x *= scaler;
                rect.y *= scaler;
            }
            else
            {

                float realHeight = Screen.height;
                float scaler = ResoultonHeight / realHeight;
                rect.width *= scaler;
                rect.height *= scaler;
                rect.x *= scaler;
                rect.y *= scaler;
            }

            return rect;
        }




    }
}

这样子就可以愉快的使用了

 Debug.Log(cc.View.getVisbleSize());
 Debug.Log(cc.View.getVisbleSafeArea());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,780评论 6 526
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,642评论 3 411
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,427评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,220评论 1 306
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,026评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,544评论 1 319
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,643评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,796评论 0 283
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,300评论 1 329
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,281评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,426评论 1 364
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,988评论 5 354
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,684评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,090评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,311评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,002评论 3 385
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,409评论 2 370

推荐阅读更多精彩内容