続いて、同じスクリプトを改良します。
各変数に SerializeField 属性を付与しておきます。
こうすることでインスペクターが Normal モードであっても値の動きもわかりますので、
インスペクターを Debug モードから Normal モードに戻してください。
インスペクターから制御することもできますので、デバッグしやすい環境になります。
この改良例は、Reset メソッドを外部クラスから実行できるメソッドを準備しておくことで、
最初にスクリプトをアタッチしたとき以外のタイミングでのリセット機能を有効にする方法の実装例です。
また、メンバ変数で値を代入していない場合には、各型ごとの初期値が代入されてしまいますので、
その場合には、Reset メソッド内で初期値を代入するように用意しておきます。
PlayerTest.cs
<= クリックすると開きます。
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PlayerTest : MonoBehaviour {
[SerializeField]
private int hp; // Reset メソッド内で初期値を代入するように変更(挙動の確認のため。そのままメンバ変数で初期化しても問題はありません)
[SerializeField]
private RigidBody rb;
void Reset() {
if(TryGetComponent(out rb)) {
Debug.Log("RigidBody を取得しました。");
} else {
Debug.Log("RigidBody が取得出来ませんでした。");
}
hp = 100;
}
// 外部クラスから初期化したいタイミングで実行させる
public void SetUpPlayer() {
Reset();
}
}
スクリプトを改良したらセーブします。
ゲームオブジェクトにアタッチされている PlayerTest スクリプトと Rigidbody コンポーネントを Remove してください。
その後、再度、PlayerTest スクリプトをアタッチして、先ほどと同じように Reset メソッドが実行されることを確認します。
インスペクター画像
スクリプトをアタッチして Reset メソッドが実行されることを確認する
動画ファイルへのリンク
各変数をインスペクターから操作できるようになりましたので、最後に Reset ボタンの確認を行います。