⚙️

【Unity】HotReload買ってみた感想と使い方(コンパイル時間が無くなる神アセット)

2023/08/02に公開

今回はUnityで使用する「HotReload」というアセットが、かなりゲーム開発を効率化できる超優秀なアセットだったので紹介していきます。

HotReloadとは?

「HotReload」はUnityエディタの拡張アセットです。Unityに導入すると、スクリプトのコンパイルを待たずにゲームをプレイできます。さらにゲーム中にもコードを変更すると、コード内容がプレイ中のゲームに即座に反映されます。公式の実演動画↓

https://youtu.be/gAOydbUMsGQ

https://assetstore.unity.com/packages/tools/utilities/hot-reload-edit-code-without-compiling-254358?aid=1101lEIhC&pubref=hotreload

このアセットでゲーム開発時間を大幅に短縮する事ができます。プログラマーなら必ず持っておきたいと言える便利なアセットになっています。

🐱どんな感じでHotReloadを使うのか紹介していきます。

HotReloadを実際に使ってみる(使い方紹介)

半信半疑の中、自分で購入して使ってみたので簡単に紹介していきます。YouTubeでも実際に使っている解説動画をアップしました↓
https://youtu.be/99uCyhd65SY

①まずはHotReloadを導入

  1. 何もない状態のプロジェクトから進めていきます(作成中のプロジェクトでも構いません)。

  2. まずは導入ですが超簡単です。購入してダウンロードしたらWindow > PackageManager > HotReloadを開く > Importします。

  3. インポートが終了すると、PackagesフォルダにHotReloadが追加されている事が確認できます。あとは、以下のようにタブが表示されるのでStartボタンをクリックするだけです。

  4. タブを結合しておきます。このタブはWindow > HotReloadからいつでも開く事ができます。

②まずはプレイ前にコンパイル待ち時間が無いか試してみる

準備できたのであとはコードを編集するだけです。試していきます。

キューブのオブジェクトを追加して、「Cube」スクリプトを作成して追加しました。

まずはゲームをプレイせずに「Cube」のコードを以下の様にDebug.Logを追加して編集します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Cube : MonoBehaviour
{
    void Update()
    {
        Debug.Log("AAAAAAAAA");
    }
}

これでプレイできます。コンパイルの待ち時間がありませんね↓

プレイすると以下のように問題無くログが表示されます。

③ゲーム中にコードを色々変更してみる

ゲームをプレイした状態で色々試していきます。上のYouTubeの方がわかりやすいのでそちらもご覧ください。

まずはCubeのコード内容を以下に変更します。

    void Update()
    {
        Debug.Log("BBBBBBBB");
    }

こんな感じにプレイ中にLogが変更されていきます↓

では今度はゲームをプレイしたまま、コードを編集していきます。以下のようにCubeのコードを変更します。

    void Update()
    {
        transform.Rotate(Vector3.up, 1.0f);
    }
    void Update()
    {
        transform.Rotate(Vector3.up, 0.2f);
    }

キューブが高速で回転します。ゲームを再生したまま下のスクリプトにするとキューブの回転がスローになります。

次にキューブの移動を実装してみます↓少しコードを変更して試してみましょう。

    void Update()
    {
        transform.Rotate(Vector3.up, 0.2f);
        transform.position += new Vector3(0, 0, 0.001f);
    }
    void Update()
    {
        transform.Rotate(Vector3.up, 0.2f);
        transform.position += new Vector3(0, 0, -0.001f);
    }

マテリアルカラーも変更してみます。

    void Update()
    {
        Renderer renderer = GetComponent<Renderer>();
        Color blueColor = Color.green;
        renderer.material.color = blueColor;
    }
    void Update()
    {
        Renderer renderer = GetComponent<Renderer>();
        Color blueColor = Color.red;
        renderer.material.color = blueColor;
    }

🐱こんな感じにスムーズにゲーム開発が進むって感じです。

④ゲーム中にエラーにさせるとどうなるのか?

ゲーム中では"コンパイルが成功した時にのみ"変更が適用されます。なのでエラーになった時点やスクリプトを編集している最中には、変更が適用されずにそのままゲームがプレイされます。コードが正しい状態になった時点で変更が適用されます。

HotReloadのメリットとデメリット

メリット デメリット
①コンパイル待ち時間が無くなる ①価格が安くはない
②ゲーム中にコード変更が即座に適用されるのでスムーズ ②エラーが起こった時にHotReloadが原因なのかどうかわかり辛い
③使い方がシンプルで簡単(オンオフの切り替えも一瞬) ③コルーチンはコンパイルされないっぽいので一時停止してからコンパイルする必要がある

HotReloadがオンだとスクリプトにエラーがあってもゲームをプレイできてしまいます。なのでちょっとエラーがわかり辛いです。ただし該当のエラーコードには赤い波線がつくので普通にエラー箇所を修正すれば良いだけです。またHotReloadのオンオフの切り替えは簡単なので一旦停止して確認する事もできます。

またコルーチンのコードですがどうやらコルーチン編集時のみ即時コンパイルされないようです。(つまりコルーチンを編集してもコンパイルされない)その時だけはHotReloadを一時停止して一度通常通りコンパイルする必要があります。HotReloadを一時停止すれば良いだけなので特に私は気にしてませんが、使う方は覚えておきましょう。

それ以外のデメリットは今の所見つかってません。また自身の作成済みのプロジェクトなどに導入してみましたが、HotReloadが要因と思われるエラーなどは発生していません。

🐱コンパイル時間が永久になくなる訳なので超ありがたいですね。コンパイルの待機時間は慣れていたので全く感じませんでしたが、HotReloadなしではやってられないすね。

「HotReload」買うべき?

流石に開発時間の短縮のメリットが大きすぎるのでUnityでプログラミングするなら買い一択かと。自分的には買って大満足です。Unityをガチでやっているユーザーの方、特にプログラマーの方には超おすすめします。

https://assetstore.unity.com/packages/tools/utilities/hot-reload-edit-code-without-compiling-254358?aid=1101lEIhC&pubref=hotreload

追記:しばらく使ってみましたがアセットの中でも過去一満足しています。ちなみにUnityのプロジェクト設定である(Enter Play Mode Optionsの有効化)と組み合わせればゲーム再生までの待機時間を一切無くす事ができます。もちろん私もこの設定やっています。またこのHotReloadきっかけに他のアセットも気になったので調べまくって「Unityおすすめアセットランキング」という記事もまとめました。気になる方はチェックしてみてください。

このアセット有益すぎたのでこの記事書いてしまいました。今後もゲーム開発効率化できる事あったら発信していきますー。あとこんな感じにかなり効率化できるアセット他にもあったらコメントで教えてほしいです🙏

Discussion