MonoBehaviour.Reset()とは
Unityちゃん2Dのスクリプトにあった見慣れない関数だったので調べてみました。
公式リファレンスを見ると、この関数はコンポーネントのコンテキストメニューまたは端っこの歯車マーククリックで出てくるメニューのResetを押したときと、Reset関数を記述したスクリプトを追加したときに呼ばれます。
主にInspectorで各コンポーネントの初期値を設定するときに使うようです。
アタッチしたコンポーネントの初期値をスクリプトでまとめて一気に設定するのが主な用途なんでしょうかね。
以下公式で配布している「ユニティちゃん 2Dデータ」のサンプルコードを使って動作を説明します。
UnityChan2DController.csを見ると、以下のようになっています。
public class UnityChan2DController : MonoBehaviour
{
public float maxSpeed = 10f;
public float jumpPower = 1000f;
~中略~
void Reset()
{
Awake();
// UnityChan2DController
maxSpeed = 10f;
jumpPower = 1000;
~以下略~
このときのインスペクターは以下のようになってます。
このままだと変数宣言時の初期値と区別がつかないので、
Resetメソッド内を以下のように変更します。(青字が変更部分)
void Reset()
{
Awake();
// UnityChan2DController
maxSpeed = 8f;
jumpPower = 93;
~以下略~
コンパイル後にResetを押すと以下のようにResetメソッド内に記述した値になりました。
また、Add Componentしてみると、やはりResetメソッド内に記述した値になりました。
ところで、さきほどのコードの続きを見ますと以下のようになっています。
void Reset()
{
Awake();
// UnityChan2DController
maxSpeed = 8f;
jumpPower = 93;
backwardForce = new Vector2(-4.5f, 5.4f);
whatIsGround = 1 << LayerMask.NameToLayer("Ground");
// Transform
transform.localScale = new Vector3(1, 1, 1);
// Rigidbody2D
m_rigidbody2D.gravityScale = 3.5f;
m_rigidbody2D.fixedAngle = true;
~以下略~
赤字のm_rigidbody2DはAwakeメソッドで取得したRigidbody2Dコンポーネントです。
重力係数を3.5、fixed angleをtrueに設定していますね。
Unityに戻ってRigidbody2DコンポーネントをResetします。
すると以下のように重力が1になり、fixed angleがfalseになります。
まあ普通の挙動ですね。
次に、スクリプトをResetします。
するとRigidbody2Dコンポーネントの重力が3.5になり、fixed angleがtrueになりました。
このように、Resetメソッドを使用することで、Resetメソッドを記述したスクリプトのResetをかけるたびに、ほかのコンポーネントの値を同時に初期化することができます。