前提・実現したいこと
現在一人のNPCと洞窟を旅するようなゲームを作っているのですが、相棒の魔法を選択するメニューのUIに不具合が起きています。
具体的には、魔法選択画面のUIをキーボードから制御する際に不可解な問題を抱えています。
このように左には前の魔法にシフトするボタンと右には次の魔法にシフトするボタンを二つ並べていて(選択中のボタンは赤くなるようにしています)、右のボタンを選択中に右キーを押すと右ボタンが押されるようにし、左も同じようにしています。
そしてそのためにイベントシステムのインスタンスにアクセスして現在選択中のボタンを取得しているのですが、これが成功するときと失敗するときがあるのです。
上の画像は成功した時で、失敗すると選択できずエラーメッセージが出ます。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object SisUI.Update () (at Assets/testAsset/Scrypt/SisUI.cs:64)
失敗するとこのエラーが出ます。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5using UnityEngine.UI; 6 7public class SisUI : MonoBehaviour 8{ 9 public bool sisMenu; 10 public GameObject sisPanel; 11 12 public GameObject sisr; 13 public GameObject sisl; 14 [SerializeField] EventSystem eventSystem; 15 16 Button bt1; 17 Button bt2; 18 GameObject selectedObj; 19 20 // Start is called before the first frame update 21 void Start() 22 { 23 24 bt1 = sisr.GetComponent<Button>(); 25 bt2 = sisl.GetComponent<Button>(); 26 //ボタンが選択された状態になる 27 bt1.Select(); 28 29 30} 31 32 // Update is called once per frame 33 void Update() 34 { 35 float choice = Input.GetAxisRaw("Horizontal"); 36 37 if (Input.GetButtonDown("SMenu")) 38 { 39 //メニュー展開ボタンを押すとメニューの表示非表示を切り替え 40 if (sisMenu) 41 { 42 43 sisMenu = false; 44 } 45 46 else if (!sisMenu) 47 { 48 sisMenu = true; 49 } 50 } 51 52 //メニュー非展開 53 if (!sisMenu) 54 { 55 Time.timeScale = 1.0f; 56 sisPanel.SetActive(false); 57 58 } 59 //メニュー展開中 60 else if (sisMenu) 61 { 62 Time.timeScale = 0; 63 sisPanel.SetActive(true); 64 65 selectedObj = eventSystem.currentSelectedGameObject.gameObject; 66 67 if (sisr == selectedObj) 68 { 69 //右のボタンが選択中に右キーを押したら 70 if (Input.GetButtonDown("ChoiceR")) 71 { 72 bt1.onClick.Invoke(); 73 } 74 } 75 else if (sisl == selectedObj) 76 { 77 //左のボタンが選択中に左キーを押したら 78 if (Input.GetButtonDown("ChoiceL")) 79 { 80 bt2.onClick.Invoke(); 81 82 } 83 } 84 } 85 } 86 87 public void MenuBreake() 88 { 89 sisMenu = false; 90 91 } 92 93 public void MenuCheck() 94 { 95 //右ボタンに反応するイベント 96 Debug.Log("Left"); 97 98 } 99 public void Check() 100 { 101 102 //左ボタンに反応するイベント 103 Debug.Log("Right"); 104 105 } 106 107} 108
試したこと
ゲームオブジェクトを一度「None」にして設定しなおしたりしました。
補足情報(FW/ツールのバージョンなど)
Unity 2019 3.7f1です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/29 00:40