ゾンビとUnity

ゾンビネタとUnityでのゲーム制作について綴るブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Unity あらゆる解像度に合わせてサイズを変えるGUI Texture

gui_texture1.jpg

Unity ver. 4.5.1

【用途】
画面いっぱいに表示させるGUIのパネルがあって、そこにボタンやスライダーなどを貼り付ける。
画面の解像度は自由に調節できる。
従って、解像度に合わせて全てのGUIパーツを拡大縮小する必要がある。

【条件】
・回転はしない。

【手順】
1. 画面いっぱいに表示するためのGUI Textureを作成。
2. テクスチャーに画面いっぱいに表示する画像を設定。
3. 1. の画像サイズを Pixel Inset の W と H に設定。
 640x480のサイズで作成した画像なら W=640 H=480
4. スクリプト(ScreenTexture ※後述)を 1. に追加。
5. 4. のスクリプトの Inspector で Fullsize_texture に 1. をドラッグ&ドロップ。

ScreenTexture のスクリプト

using UnityEngine;

public class ScreenTexture : MonoBehaviour {

private static ScreenTexture instance = null;
public static ScreenTexture Instance { get { return instance; } }

/*
fullsize_textureのEditor上で設定されているpixelInsetのWとHの値を返す。
Vector2.xがW, yがH
*/
public static Vector2 OriginalSize { get { return Instance.original_size; } }
/*
現在の画面の解像度がどれだけ拡大縮小されているかの比率を返す。
※画面の解像度と画面一杯に引き延ばすテクスチャ(fullsize_texture)の元のサイズとの比率。
※Editor上でfullsize_texture.pixelInsetに指定されているのが元のサイズ。
*/
public static Vector2 GetRatio() {
if (Instance == null || Instance.fullsize_texture == null) throw new System.NullReferenceException();
Vector2 v = Instance.original_size;
return new Vector2(Screen.width / v.x, Screen.height / v.y);
}
/*
画面の解像度に合わせて拡大縮小されたテクスチャーの配置位置と配置サイズをRectで返す。
left = 解像度に合わせて拡大縮小する前の左配置位置
top = 解像度に合わせて拡大縮小する前の上配置位置
width = 解像度に合わせて拡大縮小する前の横幅
height = 解像度に合わせて拡大縮小する前の高さ
*/
public static Rect GetRect(float left, float top, float width, float height) {
Vector2 v = GetRatio();
float w = width * v.x;
float h = height * v.y;
return new Rect((left * v.x) - (Screen.width / 2), -((top * v.y) - (Screen.height / 2) + h), w, h);
}

////////////////////////////////////////////////////////////////////////////

public GUITexture fullsize_texture = null; //画面一杯に引き延ばすテクスチャ
private Vector2 original_size;

private void Start() {
if (this.fullsize_texture == null) throw new System.NullReferenceException();
if (instance == null) instance = this;
Rect r = this.fullsize_texture.pixelInset;
this.original_size = new Vector2(r.width, r.height);
}

private void Update() {
this.fullsize_texture.pixelInset = ScreenTexture.GetRect(-1, 0, this.original_size.x + 1, this.original_size.y);
}
}

【スクリプトの説明】
エディタ上で fullsize_texture に画面いっぱいに表示する GUI Texture を設定しておきます。
ScreenTexture.GetRatio() で画像サイズと解像度の比率を求めます。
このときに fullsize_texture の pixelInset に指定した値が使われます。
GUIパーツを表示するときにこの比率を使います。
ScreenTexture.GetRect() で比率を適用した表示位置と表示サイズを取得できます。

【問題点】
・どうしても誤差が出るので、微調整は必要。

今回作ったプロジェクト一式
https://drive.google.com/file/d/0B5l1YkxnaVHoRGdxREoxSXFhYTQ/edit?usp=sharing
スポンサーサイト

- 0 Comments

Add your comment

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。