こんにちは。ゆきのもりです。
ゲームのエンジニアを経験して4年くらいになります

Update関数ってなんだ? どう使うんだ?
今日はそんな疑問にお答えしようと思います
【Unity初心者向け】 Update と FixedUpdate の使い方

Unityの参考書などを見ていると出てくる「Update」「FixedUpdate」について解説します
Update関数
はじめにUpdate関数について解説します
Update関数とは?
超おおよそ0.03秒ごとに自動的に実行される関数です
public class ExampleClass : MonoBehaviour {
詳しい使用条件をいえば、こんな感じでMonoBehaviourというクラスを継承していれば使えますが、まあ、初心者はほぼ全部のクラスで使える、と思ってもらって大丈夫です
0.03秒というのは本当にすごくとってもおおよそです
説明の都合上、簡潔に「0.03」としましたが正確には一定ではないため注意してください。というか、かなりブレます
この関数についてより正確に説明すると、0.03秒ごとではなく「1フレームごと」となります
とはいえ、フレームレートに関してはパソコンの性能に依存して変化するため、これという秒数を断言することは出来ません
なお、Unityのフレームレート設定に関してはこちらに詳しい説明があります
使用例
Updateのよくある用途は定期的に実行する処理です
例えばこんな感じですね
private float time;
void Update() {
time += Time.deltaTime;
if (time >= 1.0) {
// ここに1秒ごとに実行したい処理を書く
time= 0.0f;
}
}
Time.deltaTimeには前回Updateを実行した時刻から、今回Updateを実行した時刻までの経過時間が格納されています
ifの条件式によって1秒以上の時間が経過したとき、if内の内側が実行されるという処理が作れます
前述の通り、Updateの実行周期はかなりまばらであるため、この処理で作れるのは「おおよそ1秒間隔」の処理である点に注意です
FixedUpdate関数

はじめにFixedUpdate関数について解説します
FixedUpdate関数とは?
確実に0.02秒ごとに自動的に実行される関数です
こちらは確実に0.02秒ごとに実行されるのが特徴です
正確な入力が求められるアクションや音ゲーなどでは利用機会が多いかもしれませんね
なお、0.02秒という周期を意図的に変更することもできます(詳しくはドキュメント参照)
ただし、便利だからといってこちらに処理を詰め込みすぎると、衝突判定や描画に影響が出てしまいます
作るゲームの特性を考えて必要最小限の利用にとどめましょう
使用例
使用方法はUpdateとまったく同じです。こちらも周期処理に使用することが多いです
private float time;
void FixedUpdate() {
time += Time.deltaTime;
if (time >= 1.0) {
// ここに1秒ごとに実行したい処理を書く
time= 0.0f;
}
Updateと内容は同じなので説明は省略します
FixedUpdateは確実な0.02秒周期となるため、より正確な「1秒」を計測できます
まとめ

UpdateおよびFixedUpdateのまとめです
目的に応じて次のように使い分けると良いでしょう
以上です!ではまた!
コメント