Unity iPhoneX安全區(qū)適配

原理:獲取iOS底層安全區(qū)范圍 返回到游戲?qū)?對(duì)畫布進(jìn)行重新設(shè)置
游戲?qū)哟a:SetCanvasBounds.cs 拖入畫布 和畫布子物體RectTransform
文章末尾有鏈接

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;

public class SetCanvasBounds : MonoBehaviour {

#if UNITY_IOS
    [DllImport("__Internal")]
    private extern static void GetSafeAreaImpl(out float x, out float y, out float w, out float h);
#endif

    private Rect GetSafeArea()
    {
        float x, y, w, h;
#if UNITY_IOS
        GetSafeAreaImpl(out x, out y, out w, out h);
#else
        x = 0;
        y = 0;
        w = Screen.width;
        h = Screen.height;
#endif
        return new Rect(x, y, w, h);
    }

    public RectTransform canvas;
    public RectTransform panel;
    Rect lastSafeArea = new Rect(0, 0, 0, 0);

    // Use this for initialization
    void Start () {
        
    }

    void ApplySafeArea(Rect area)
    {
        var anchorMin = area.position;
        var anchorMax = area.position + area.size;
        anchorMin.x /= Screen.width;
        anchorMin.y /= Screen.height;
        anchorMax.x /= Screen.width;
        anchorMax.y /= Screen.height;
        panel.anchorMin = anchorMin;
        panel.anchorMax = anchorMax;

        lastSafeArea = area;
    }

    // Update is called once per frame
    void Update () 
    {
        Rect safeArea = GetSafeArea(); // or Screen.safeArea if you use a version of Unity that supports it

        if (safeArea != lastSafeArea)
            ApplySafeArea(safeArea);
    }
}

底層代碼(也就是放在unityplugin文件夾下代碼)
SafeAreaImpl.mm


#include <CoreGraphics/CoreGraphics.h>
#include "UnityAppController.h"
#include "UI/UnityView.h"

CGRect CustomComputeSafeArea(UIView* view)
{
    CGSize screenSize = view.bounds.size;
    CGRect screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height);
    
    UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0, 0);
    if ([view respondsToSelector: @selector(safeAreaInsets)])
        insets = [view safeAreaInsets];
    
    screenRect.origin.x += insets.left;
    screenRect.origin.y += insets.bottom; // Unity uses bottom left as the origin
    screenRect.size.width -= insets.left + insets.right;
    screenRect.size.height -= insets.top + insets.bottom;
    
    float scale = view.contentScaleFactor;
    screenRect.origin.x *= scale;
    screenRect.origin.y *= scale;
    screenRect.size.width *= scale;
    screenRect.size.height *= scale;
    return screenRect;
}

extern "C" void GetSafeAreaImpl(float* x, float* y, float* w, float* h)
{
    UIView* view = GetAppController().unityView;
    CGRect area = CustomComputeSafeArea(view);
    *x = area.origin.x;
    *y = area.origin.y;
    *w = area.size.width;
    *h = area.size.height;
}


編輯器:


image.png

效果:


IMG_20180115_150658.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竹握,一起剝皮案震驚了整個(gè)濱河市梗摇,隨后出現(xiàn)的幾起案子踪区,更是在濱河造成了極大的恐慌录淡,老刑警劉巖烈钞,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)戳葵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汉匙,“玉大人拱烁,你說(shuō)我怎么就攤上這事生蚁。” “怎么了邻梆?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵守伸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浦妄,道長(zhǎng)尼摹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任剂娄,我火速辦了婚禮蠢涝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阅懦。我一直安慰自己和二,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布耳胎。 她就那樣靜靜地躺著惯吕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怕午。 梳的紋絲不亂的頭發(fā)上废登,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音郁惜,去河邊找鬼堡距。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兆蕉,可吹牛的內(nèi)容都是我干的羽戒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虎韵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼易稠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起包蓝,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缩多,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后养晋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衬吆,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绳泉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逊抡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冒嫡,靈堂內(nèi)的尸體忽然破棺而出拇勃,到底是詐尸還是另有隱情,我是刑警寧澤孝凌,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布方咆,位于F島的核電站,受9級(jí)特大地震影響蟀架,放射性物質(zhì)發(fā)生泄漏瓣赂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一片拍、第九天 我趴在偏房一處隱蔽的房頂上張望煌集。 院中可真熱鬧,春花似錦捌省、人聲如沸苫纤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卷拘。三九已至,卻和暖如春祝高,著一層夾襖步出監(jiān)牢的瞬間栗弟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工褂策, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留横腿,地道東北人颓屑。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓斤寂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揪惦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遍搞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容