読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

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

解像度の変更、初期化関数、更新関数【Unity】

Unity

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

Unity関連で記事のするほどじゃないけど、まとめておきたいモノを複数列挙する感じの記事です。

Tipsみたいなものなのでそれぞれに関係はありません。


解像度の変更

UnityはAndroidやiOSの実機上でゲームを実行する時に、

以下の方法でスクリプトからゲーム画面の解像度を設定できる

float width  = 640;
float height = 960;

bool fullscreen = true;

int preferredRefreshRate = 60;

Screen.SetResolution(width , height, fullscreen, preferredRefreshRate);



このままだとアス比も固定されてしまうので、

以下の方法でアス比を端末に合わせて、解像度を変更した方が良さそうです。

float screenRate = (float)1024 / Screen.height;
if( screenRate > 1 ) screenRate = 1;
int width = (int)(Screen.width * screenRate);
int height = (int)(Screen.height * screenRate);
Screen.SetResolution( width , height, true, 15);


ただ、起動時に普通にスクリプトから実行してしまうと、

解像度変更時に一瞬画面がおかしくなるので、注意が必要です.


初期化関数

Unityでは初期化を行う関数が複数あり、以下の通りの順番で呼ばれます。

これらの初期化関数が実行後、Updateなどの更新関数が始まります。

Awake()
OnEnable()
OnLevelWasLoaded(int level)
Start()



ただし、どのスクリプトのAwakeから実行されるかは不定です。

実行順序の指定は[Edit]-[Project Settings]-[Script Execution Order]から行えます。


f:id:kan_kikuchi:20150323073444p:plain


また、OnLevelWasLoadedはシーンの読込み後に呼ばれる関数で、

最初のシーンでは呼ばれないようです。


さらに、OnEnable()はAwake()の直後に呼ばれるため、

AのAwake()、AのOnEnable()、BのAwake()、BのOnEnable()、

という順番で実行されます。


実行順序をいちいち指定してたらキリが無いので、

他のスクリプトへの参照が必要な初期化がStart、それ以外はAwakeでやっています。


更新関数

Unityでは自動で何度も実行される更新関数が複数あり、以下の通りの順番で呼ばれます。

初期化関数同様、どのスクリプトから実行されるかは不定です。

Update()

毎フレーム実行される関数

フレームの間隔は完全に一定では無いため、不定期に実行される。

1/60秒ぐらいで実行、のような感じ。

Time.deltaTimeで前回のUpdateからの経過時間を取得できる。

LateUpdate()

Updateの後に実行される。

カメラが他のキャラクターを追う場合の追跡処理等、

他のスクリプトのUpdateが終わった後に処理を行いたい時に使う

FixedUpdateUpdate()

定期的に実行される関数

物理演算が行われる前に実行されるため、AddForceやら物理的な処理(?)を行う時に使用する。

なお、毎フレーム実行されるわけではないので、タッチ判定などを行うと取り逃がす危険性有り

Time. fixedDeltaTimeで実行される間隔を取得できる。