私は現在、playerとenemyが交互に攻撃しあうゲームを作成しております。
Unitクラスにhp、atkなどのパラメータを入れ、BattleMainSystemで、
Unitクラスのインスタンスplayerとenemyを制御しています。
新たに装備クラスを作成して、playerのhpを上げるステータス変化の実装を行いたいのですが、
NullReferenceException: Object reference not set to an instance of an object
と出てきてしまいます。staticでの方法も試しましたが、うまくいきません。どこに原因があるか教えていただけますでしょうか。
# Battleシーンのplayer(Unitクラスを保持)
![
Settingシーンの001(PanelControllerクラスを保持)
Debug.Log(GameObject.Find("Player"));をUnitクラスでは
↓それぞれPlayer、Enemyという空オブジェクトにアタッチしています。
public class Unit : MonoBehaviour { public Slider HPbar; public int hp; public int hpMax = 100; public int atk = 10;
↓BattleMainSystemという空オブジェクトにアタッチしていて、それぞれには上記のオブジェクトを指定しています。
public class BattleMainSystem : MonoBehaviour { public Unit player; public Unit enemy;
↓ここが装備クラスでここで、playerのステータスを自由に変更したいです。
public class PanelController : MonoBehaviour{ void Start() { Debug.Log(GameObject.Find("Player").GetComponent<Unit>().hp); }
追記エラーコード
NullReferenceException: Object reference not set to an instance of an object PanelController.Start () (at Assets/Scripts/PanelController.cs:14)
14行目とは、Debug.Log(GameObject.Find("Player").GetComponent<Unit>().hp);の部分です。
おそらく装備クラスでインスタンスを作る必要があるのではないかと考えていますが、うまくいきませんでした。
過去のサイト等を参照させていただいたのですが、問題点がどこに当たるのかが分かりません。。。
追記
Debug.Log(GameObject.Find("Player").GetComponent<Unit>().hpMax);をBattleMainSystemクラスに仕込んでみたところ、予想される値が表示されました。装備(PanelController)クラスでのみエラーをはきます。
# Debug.Log(GameObject.Find("Player"));を入れたところ、UnitクラスとPanelControllerクラスで異なる。
![]