複数の端末の解像度に対応させる2 - GUITexutreの表示を解像度と非依存にする
前回の記事では、Unity内のSceneに表示される解像度を固定化する方法を紹介しました。
今回はさらに進んで、GUITextureの表示を解像度と非依存にしてみます。
解像度と非依存にするためには、前回の記事で紹介したスクリプトが必要になります。
なおここで紹介しているのは、Unityのバージョンが4.3くらいのときに作成したスクリプトです。
記事を書いている時の最新版(Unity 4.6)では新しいUIが採用され、そちらを使えばもっと楽に解像度非依存の環境で製作できそうです。
ただし、GUITextureを今後も使っていきたい方は参考になるかもしれません。
サンプルスクリプト
GUITextureを用いた場合に、解像度に応じて自動的に位置や拡大率を変更してくれるサンプルを以下に示します。
#pragma strict var aspectRatioCtrl : Fixed_Aspect_Ratio = null; // 解像度固定スクリプト var x : float = 0.0f; // 表示位置(X座標) var y : float = 0.0f; // 表示位置(Y座標) var width : float = 1.0f; // 横幅 var height : float = 1.0f; // 縦幅 function Update() { var texture : GUITexture; texture = GetComponent(GUITexture); // GUITextureと同じGameObjectに本コンポーネントが存在している必要がある if (!texture) { return; } // 解像度固定スクリプトにより制御された解像度 if (aspectRatioCtrl) { var rect : Rect; rect = aspectRatioCtrl.camRect; texture.pixelInset.x = (x * rect.width) * Screen.width; texture.pixelInset.y = (y * rect.height) * Screen.height; texture.pixelInset.width = width * rect.width * Screen.width; texture.pixelInset.height = height * rect.height * Screen.height; } // デフォルトの解像度 else{ texture.pixelInset.x = x * Screen.width; texture.pixelInset.y = y * Screen.height; texture.pixelInset.width = width * Screen.width; texture.pixelInset.height = height * Screen.height; } }
パラメータ
サンプルスクリプトでは、以下のパラメータを指定することが出来ます。
Aspect Ratio Ctrl | 解像度固定スクリプト(ここのサンプルスクリプトをFixed_Aspect_Ratio.jsとして保存する必要がある) |
---|---|
X | 表示位置(X座標) |
Y | 表示位置(Y座標) |
Width | 横幅 |
Height | 縦幅 |
使用例
上記サンプルスクリプトを実際にUnityに導入してみます。
静止画なので分かりづらいと思いますが、実際にこのプラグインを導入しUnityのウィンドウの大きさを変更してみると、画像の位置と大きさが画面サイズに応じて変更されることが分かります。