0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

unity: 一時停止して再開するときのみ発生する、エラーの調査

0
Posted at

unity: 一時停止して再開するときのみ発生する、エラーの調査

エラーの内容

Unityではゲームの再生を停止して再開する機能がある。再開する前にソースコードを編集すると、再コンパイルされる。

Unityエディタ上でのリスタート(再生の停止・再開)時に、必ず以下のエラーが発生する。

NullReferenceException: Object reference not set to an instance of an object

発生場所

void FixedUpdate()
{
    // ... コード ...
    
    float rpm = throttle * rotorController.GetMaxRpm();

    // ... コード ...
}

調査の結果、rotorControllerがNullになっていて、GetMaxRpm()を呼び出そうとしてエラーが発生していた。しかし、なぜNullになったのだろうか。

原因

RotorController rotorController;
void Start()
{
    rotorController = new RotorController(transform);
}

このコードは最初の一回しか実行されない。

Restartすると、private fieldであるrotorControllerの値は保存されない(Serialized Fieldやpublic fieldは保存されるかも)。

結果、rotorControllerには初期値であるNullが入ることになる。

解決策

Serialized Fieldとして定義する方法もあったが、コードと実際の値が異なってほしくないのでなるべく使いたくない。

Start => OnEnableに変更。
Restart時にもOnEnableは実行される。OnEnableはスクリプトが有効化されるときに実行される。

RotorController rotorController;
void OnEnable()
{
    rotorController = new RotorController(transform);
}

参考になりそうなもの

詳しく知りたい方はどうぞ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?