Densyakunのブログ

Qiitaもやってます: https://qiita.com/Densyakun

【Unity】MonoBehaviourの挙動について

お久しぶりです。電車君です。

港の見える丘公園に行ったらちょうど「第33回 全国都市緑化よこはまフェア」をやっていてものすごいことになっていました。

小さい時は自然が好きだったのを改めて実感しました。

超会議に行ってきたりもしましたが、自分は人が多いところが苦手なので...

 

Unity関連は少し後回ししていました。電鯖もやりますよ。...多分。

 

今年から高校生になったので少し忙しくなりますが、

ブログの投稿頻度は上げていきます。

 

MonoBehaviourの挙動について

本題ですが、MonoBehaviourの基本的なメソッドにはStartとUpdateがあります。

 

Unity - マニュアル: イベント関数の実行順

Updateはゲームの実行中に繰り返し実行されます。

Startは最初のUpdateが実行される前に実行されます。

Startはゲームの実行中にスクリプトが更新されるときには実行されません。

 

Updateが繰り返される周期は一定ではありませんので、

PCのスペック等に応じて動作が変化してしまいます。

Time.deltaTimeを使用することで、「前回Updateが実行された時からの経過時間(秒)」を取得できます。

 

他にもFixedUpdateというのがあります。

FixedUpdateは繰り返し実行される周期が一定で、

例え固まったときなどで周期が乱れても遅れた分実行され元に戻ります。

FixedUpdateを使わなくても、ゲーム起動からの時間を調べる事はできますがおすすめはしません。

FixedUpdateの周期(秒)はTime.fixedDeltaTimeで取得できます。

 

スクリプトコンポーネント)が(Destroyなどで)消えるときはOnDestroyなどがあります。

 

他にはAwakeや、あまり見たことはないですがOnEnableと言うのもあります。

 

AwakeはOnEnableよりも前のタイミング、

意外なことにスクリプトが無効になっていても、

オブジェクトが最初に有効になったときに実行されます。

f:id:Densyakun:20170507184029p:plain

オブジェクト名の横にあるチェックボックスに、

チェックが付いてるときはオブジェクトが有効である。

同様にスクリプトの横にも有効化チェックボックスがある。

 

AwakeやStartは1度のみ実行されますが、

OnEnableはスクリプトが有効になる"たび"実行されます。

 

知っている人は少ないと思いますがResetというのがあります。

一番最初に実行されるはずですが早いタイミングに実行されるからか、

自分の環境では全く動きませんでした。多分使えないぽいです。

 

一体どれをどのように使えばいいのかは難しいですが、

とりあえず最初のうちはStartとUpdate、FixedUpdateを使い分けることをおすすめします。