====== 051 Spriteの画面解像度対応 ====== ===== 概要 ===== Spriteのサイズや位置を画面解像度に合わせて調整します。 ==== ソースコード ==== using UnityEngine; using System.Collections; public class CameraScript : MonoBehaviour { public const float PixelToUnits = 100.0f; // ゲーム内解像度 public const int BaseScreenWidth = 640; public const int BaseScreenHeight = 960; void Awake() { Camera cam = gameObject.GetComponent(); cam.orthographicSize = BaseScreenHeight / PixelToUnits / 2; float baseAspect = (float)BaseScreenHeight / (float)BaseScreenWidth; float nowAspect = (float)Screen.height/(float)Screen.width; float changeAspect; if( baseAspect > nowAspect ) { changeAspect = nowAspect / baseAspect; cam.rect = new Rect( ( 1.0f - changeAspect ) * 0.5f, 0.0f, changeAspect, 1.0f ); } else { changeAspect = baseAspect / nowAspect; cam.rect = new Rect( 0.0f, ( 1.0f - changeAspect ) * 0.5f, 1.0f, changeAspect ); } } } orthographicSize とrectを調整しています。これで解像度に合わせたサイズに描画されます。 ==== 座標設定に関して ==== 座標設定用の関数を用意します。 public void SetPos ( ref GameObject _obj, float _posX, float _posY ) { float fPixelToUnits = CameraScript.PixelToUnits; float baseScreenWidth = CameraScript.BaseScreenWidth; float baseScreenHeight = CameraScript.BaseScreenHeight; Vector2 topleft = new Vector2 ( -(( baseScreenWidth * 0.5f ) / fPixelToUnits ), (( baseScreenHeight * 0.5f ) / fPixelToUnits ) ); Vector2 offset = new Vector2 ( (( _posX ) / fPixelToUnits ), -(( _posY ) / fPixelToUnits ) ); _obj.transform.position = new Vector3 ( topleft.x + offset.x, topleft.y + offset.y, 0.0f ); } 直接positionを操作するのではなく、SetPos関数を実装して設定します。 SetPos関数はSpriteの中心を(0, 0)と見立てて座標指定します。 これを任意のGameObjectから呼び出してあげます。 GameObject obj = gameObject; SetPos( ref obj, 320.0f, 32.0f ); // 画像サイズが640x32なので中心に。 ==== 実行結果 ==== {{:wiki:unity:tips:unity_aspect_adjust.png?200|}}