(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

GameWindowの設定が変わった時に処理を行う【Unity】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.2.2f1 Personal


はじめに

画面のアス比によって位置やサイズ調整などの処理をしたいって時、

いちいちゲームを再生するのは面倒ですよね。



今回はそんな時に使える方法で、

GameWindowのサイズを変えた時に処理を実行する方法です。


f:id:kan_kikuchi:20151209134347p:plain


ExecuteInEditMode

一番の問題はUnityを再生していない時の処理方法ですが、

ExecuteInEditModeを使う事で簡単に実現できます。

using UnityEngine;
using System.Collections;

[ExecuteInEditMode] //これだけ!
public class NewBehaviourScript1 : MonoBehaviour {

}

Unity - スクリプトリファレンス: ExecuteInEditMode


UIAdjuster

んでExecuteInEditModeを使って作ったのが以下の

アス比に合わせてUIの位置やサイズを調整するクラス、UIAdjuster。



実際のUI調整はAdjustUIの中で行います。

上記コードではアス比をログで出しているだけなので、以下のような感じになります。


f:id:kan_kikuchi:20151210133443g:plain


UIAdjusterの仕組みは至極単純で、アス比を保持しておいて

Updateのタイミングでアス比に変更があればAdjustUIを実行しているだけです。


ただし、Updateは再生中とは違い、常に実行されるわけではなく

Windowのサイズを変えた時など、特定のタイミングで実行されます。


なお、継承して使う前提なので各メソッドはprotected virtualになっています。


おわりに

NGUI等を使っていれば、そんなにUIの調整は必要ないとは思うんですが、

どうしても細かい修正したい場合に使えるやつでした。