
最近Unityで「UnityML-Agents 実践ゲームプログラミング」に沿ってAI使用でのロボット用プログラミングに励んでいたのですが、なかなかつまずくところも多く記憶に残っているものを備忘録もかねて載せていきたいと思います。
これはVisualObservation関係で参考用に入手したunitypackageをインストールして再現しようとした時に出たエラーなのですが、以下のようなエラーが発生して実行できませんでした。
NullReferenceException: Object reference not set to an instance of an object
VisualObservationPJ.CollectObservations (Unity.MLAgents.Sensors.VectorSensor sensor)
実際に発生したコードの場所は、以下のようなCollectObservations()の箇所の
sensor.AddObservation(rBody.velocity.magnitude);
の行でした。
ログなど取っていったところrBodyは設定されており、sensorがnullとなっていました。
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(rBody.velocity.magnitude);
:
:
}
いろいろと調べていった結果としては以下のようでした。
受領したデータにはBehavior Parametersのモデルにあるモデルが入っていたためこれを使って推論事項の形で動かしてみようとやっていました。
このモデルの中身がVectorObservationなしのタイプだったようで、これとその周りの設定に不一致がありモデルで使用しないはずの設定がBehavior Parametersやスクリプト内であるということでエラーが出ていたようです。
Behavior ParametersのSpaceSizeの設定が0以外となっていたり、CollectObservations()内で、
sensor.AddObservation(rBody.velocity.magnitude);
のようにして観察項目を設定しようとしていたためエラーとなっていたようです。
このため、Behavior Parametersのモデルにあるモデルを削除して実行したところ実行できるようになりました。
モデルを入れて実行する場合にモデル側ではVectorObservationを使用しないタイプでそれ以外の設定がVectorObservationを使用するタイプの設定になっているなどモデル側と
Behavior Parametersなどの設定があっていないとエラーが発生するということです。
以上が、参考用に入手したデータなどでモデル側とBehavior Parametersやスクリプト側で設定があっていない場合にエラーが発生した時の対応方法の一例になります。
関連記事:
【Unity】Unityで親オブジェクトにアクセスする方法 - Django Girls and Boys 備忘録
【Unity】Unityで背景を設定する方法 - Django Girls and Boys 備忘録
【Unity NavMesh】NavMeshObstacleを追加する方法 - Django Girls and Boys 備忘録
【Unity】NavMesh、NavMeshAgentの使用方法 - Django Girls and Boys 備忘録
【Unity】オブジェクトの影をなくす方法 - Django Girls and Boys 備忘録
【Unity】オブジェクトの影(シェイド)を消す方法 - Django Girls and Boys 備忘録
【Unity】「Unityの教科書」 初心者から中級者まで、ゲーム開発の頼れるガイド - Django Girls and Boys 備忘録
【Unity】「ML-Agents 実践ゲームプログラミング」でPyTorchのインストール時にエラーが発生した時の解決方法 - Django Girls and Boys 備忘録
【Unity】ML-Agentsにおけるエピソード完了 - Django Girls and Boys 備忘録
【Unity】『UnityではじめるML-Agents実践ゲームプログラミング』について - Django Girls and Boys 備忘録