保存

UIScreenAdaptive.cs

NGUI版本必须是3.x,然后将该脚本添加到UIRoot就行了,适合各种分辨率。

using UnityEngine;

namespace Com.Xyz.UI
{
    [ExecuteInEditMode]
    [RequireComponent(typeof(UIRoot))]
    public class UIScreenAdaptive : MonoBehaviour
    {
        public int aspectRatioWidth = 1280;
        public int aspectRatioHeight = 720;
        public bool runOnlyOnce = false;
        private UIRoot mRoot;
        private bool mStarted = false;

        private void Awake()
        {
            UICamera.onScreenResize += OnScreenResize;
        }

        private void OnDestroy()
        {
            UICamera.onScreenResize -= OnScreenResize;
        }

        private void Start()
        {
            mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);

            mRoot.scalingStyle = UIRoot.Scaling.FixedSize;

            this.Update();
            mStarted = true;
        }

        private void OnScreenResize()
        {
            if (mStarted && runOnlyOnce)
            {
                this.Update();
            }
        }

        private void Update()
        {
            float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;
            float currentAspectRatio = Screen.width * 1f / Screen.height;

            if (defaultAspectRatio > currentAspectRatio)
            {
                int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);
                mRoot.manualHeight = horizontalManualHeight;
            }
            else
            {
                mRoot.manualHeight = aspectRatioHeight;
            }

            if (runOnlyOnce && Application.isPlaying)
            {
                this.enabled = false;
            }
        }
    }
}