Unity NGUIのマルチ解像度が似合います.

8902 ワード

参照リンク:http://blog.csdn.net/mfc11/article/details/17681429、著者:CSDN mfc 11
 
1、NGUIのデフォルトの適応方式:
NGUIはデフォルトでは適応方式であり、高度に適応した具体的な設定で接続を参照することができる.http://www.cnblogs.com/vitah/p/3942392.html.
2、デフォルトの適応方式を使うと発生する可能性のある問題:
ターゲットデバイスのアスペクト比が編集ページのアスペクト比と一致する場合、UI全体が完全に表示される.ターゲットデバイスのアスペクト比が編集されたアスペクト比よりも小さい場合、ページ幅はデバイス幅より大きくなり、多くの部分が表示できなくなります.ターゲットデバイスのアスペクト比が編集されたアスペクト比よりも大きい場合、ページ幅はデバイスの幅より小さく、デバイスの両側に黒いエッジが現れます.
3、UICAncherを使う:
UAncherは、ページ全体をTopLeft/Top/TopRight/Left/Center/Right/Bottom Left/Bottom/Bottom/Bottom Rightの9つのエリアに分割し、UEAncherコンポーネントを搭載したノードは、設定に従って自動的にそれぞれのエリアにドッキングします.UICAnchorがあると、上記の2つの問題はある程度解決されます.ターゲットデバイスのアスペクト比が編集のアスペクト比よりも小さい場合、UICAnchorの自動ドッキング機能により、UIは切断されません.しかし、UI間の左右の間隔はそれに応じて小さくなり、UIの重複問題が発生する可能性があります.ターゲットデバイスのアスペクト比が編集されたアスペクト比よりも大きい場合、UI間の左右の間隔は大きくなり、UIが少なくとも切断されたり重複されたりすることはない.
このようなUAnchorを使う方法は、出現する可能性のあるUIの重複を解決するだけであるが、フルスクリーンのスプライトがある場合は、画面全体に敷き詰められたUID SpriteはUAnchorrを使うかどうかに関わらず、ターゲットデバイスの幅がより小さい場合は、スプライトは横方向に切断され、ターゲットデバイスの幅がより大きい場合は、スクリーン全体を覆うことができない.
4、UICAncherを使用する際にUI表示を調整する必要がある問題:
まとめて三つの問題について:
(1)デバイスのアスペクト比がUIに与えられたアスペクト比よりも小さい場合、UIの重複問題.
(2)デバイスのアスペクト比がUIに与えられた幅よりも小さく、フルスクリーンのspriteが切断された.
(3)デバイスの幅はUIの幅よりも高く、スクリーン全体を覆うことができない.
5、デバイスのアスペクト比がUIに与えられた幅よりも高い場合、UIの重複問題の解決方法:
デバイスの幅がUIの幅より小さい場合、UI RootはUIの高さに応じてscaleサイズを調整し、デバイスの幅が全てのUIコンテンツを表示するに足りないようにします.カメラのCamera.orthographicSizeを調整して、ページの幅を十分に表示することができます.つまり、NGUIの既存の「高度適応」の原則を変えて、「幅適応」に変えて、全ページが表示されるようにします.UICAncherの存在によって、UIの左右の間隔は一定に保たれますが、上下の間隔は大きくなります.コードを提供し、UI Root下のCamereオブジェクトにマウントする.

using UnityEngine;

using System.Collections;



public class UIAdjust : MonoBehaviour

{

    //   UI   

    private float standard_width = 1280f;

    private float standard_height = 720f;

    

    //      

    private float device_width = 0f;

    private float device_height = 0f;



    public void Awake()

    {

        //        

        device_width = Screen.width;

        device_height = Screen.height;



        SetCameraSize();

    }



    private void SetCameraSize()

    {

        float adjustor = 0f;



        // UI    

        float standard_aspect = standard_width / standard_height;



        //       

        float device_aspect = device_width / device_height;



        //        UI    ,  Camere orthographicSize,           UI,                

        if (device_aspect < standard_aspect)

        {

            adjustor = standard_aspect / device_aspect; 

            camera.orthographicSize = adjustor;

        }

    }

}
View Code
控訴コードは非フルスクリーンのUI適応問題を解決できます.
6、5ステップをベースに、全画面スプライトの表示問題:
5ステップに基づいて、全画面スプライトの表示には2つの問題があります.
(1)設備の広さがより小さい場合、スプライトは上下を満たさない:
(2)設備の広さがより大きい場合、スプライトの左右は満たさない;
この時、私達は対応する割合によってフルスクリーンのspriteを調節して、上下方向と左右方向のscaleの値を調節してもいいです.前提はこのspriteが引っ張られてもいいです.引っ張られないspriteなら他の方法を採用して、フルスクリーンの表示が必要なspriteにマウントします.

using UnityEngine;

using System.Collections;



public class FullScreenSpriteAdjust : MonoBehaviour 

{

    private float standard_width = 1280f;

    private float standard_height = 720f;

    private float device_width = 0f;

    private float device_height = 0f;



    void Awake()

    {

        device_width = Screen.width;

        device_height = Screen.height;

        SpriteAdjust();

    }



    void SpriteAdjust()

    {

        //         

        float standard_aspect = standard_width / standard_height;



        //       

        float device_aspect = device_width / device_height;



        float scale_x = 1;

        float scale_y = 1;



        //             ,sprite     

        if (device_aspect > standard_aspect)

        {

            scale_x = device_aspect / standard_aspect;

        }

        //             ,sprite     

        else if (device_aspect < standard_aspect)

        {

            scale_y = standard_aspect / device_aspect;

        }



        gameObject.transform.localScale = new Vector3(scale_x, scale_y, gameObject.transform.localScale.z);

    }

}
View Code
文章の内容はほとんど参考リンクをコピーしています.作者の考えに感謝します.コードは自分で書いたものです.もっといい方法があれば、メッセージやメールアドレス:linw 1225.com(〹換成@)~