実現したいこと
〇実現したいこと
初期状態では半透明の画像を表示せず、対応するキーボードを押している間のみ半透明の画像を表示したい。
⇒キーボードが入力されていることを明示するため。
〇前提
Web上で動かすリズムゲームを作成している。
〇現状
初期状態で半透明の画像が表示されている。
最初に対応するキーボードを押すことで画像を消すことが出来る。
2回目の入力以降は想定している動作をする(押している間だけ半透明の画像が表示される)。
追記:被せるように表示する画像(本題の半透明の画像)はUIは画像(Image)を使用している。
発生している問題・分からないこと
〇問題
初期状態で半透明の画像が表示されてしまうこと。
⇒StartメソッドでGameObject.SetActive(bool)をtrueに設定している為表示されているが、falseに設定すると以下のエラーが発生する
NullReferenceException: Object reference not set to an instance of an object SoundPadController.Start ()
※この状態でキーボードを押しても画像は表示されていないように見える。
該当のソースコード
C#
1using UnityEngine; 2 3public class SoundPadController : MonoBehaviour 4{ 5 [SerializeField] private GameObject padCover1, padCover2, padCover3, padCover4, padCover5, 6 padCover6, padCover7, padCover8, padCover9, padCover10, 7 padCover11, padCover12, padCover13, padCover14, padCover15 ; 8 9 void Start() 10 { 11 Application.targetFrameRate = 60; 12 padCover1 = GameObject.Find("PadCover1"); 13 padCover2 = GameObject.Find("PadCover2"); 14 padCover3 = GameObject.Find("PadCover3"); 15 padCover4 = GameObject.Find("PadCover4"); 16 padCover5 = GameObject.Find("PadCover5"); 17 padCover6 = GameObject.Find("PadCover6"); 18 padCover7 = GameObject.Find("PadCover7"); 19 padCover8 = GameObject.Find("PadCover8"); 20 padCover9 = GameObject.Find("PadCover9"); 21 padCover10 = GameObject.Find("PadCover10"); 22 padCover11 = GameObject.Find("PadCover11"); 23 padCover12 = GameObject.Find("PadCover12"); 24 padCover13 = GameObject.Find("PadCover13"); 25 padCover14 = GameObject.Find("PadCover14"); 26 padCover15 = GameObject.Find("PadCover15"); 27 28 // falseにするとnullエラーになるので打算的に 29 padCover1.SetActive(true); 30 padCover2.SetActive(true); 31 padCover3.SetActive(true); 32 padCover4.SetActive(true); 33 padCover5.SetActive(true); 34 padCover6.SetActive(true); 35 padCover7.SetActive(true); 36 padCover8.SetActive(true); 37 padCover9.SetActive(true); 38 padCover10.SetActive(true); 39 padCover11.SetActive(true); 40 padCover12.SetActive(true); 41 padCover13.SetActive(true); 42 padCover14.SetActive(true); 43 padCover15.SetActive(true); 44 45 // 本当は初期状態はこっちにしたい 46 //padCover1.SetActive(false); 47 //padCover2.SetActive(false); 48 //padCover3.SetActive(false); 49 //padCover4.SetActive(false); 50 //padCover5.SetActive(false); 51 //padCover6.SetActive(false); 52 //padCover7.SetActive(false); 53 //padCover8.SetActive(false); 54 //padCover9.SetActive(false); 55 //padCover10.SetActive(false); 56 //padCover11.SetActive(false); 57 //padCover12.SetActive(false); 58 //padCover13.SetActive(false); 59 //padCover14.SetActive(false); 60 //padCover15.SetActive(false); 61 } 62 63 void Update() 64 { 65 PressSoundKeyPad(); 66 } 67 68 /* 69 * 押しているだけ半透明の画像を表示して 70 * キーに対応したパッドが光ったかのように見せる 71 * 72 * 以下、ざっくりとした構成 73 * 各キーボード別に「押すと表示」「離すと非表示」 74 */ 75 public void PressSoundKeyPad() 76 { 77 // 1段目 78 if (Input.GetKeyDown(KeyCode.E)) padCover1.SetActive(true); 79 if (Input.GetKeyUp(KeyCode.E)) padCover1.SetActive(false); 80 81 if (Input.GetKeyDown(KeyCode.R)) padCover2.SetActive(true); 82 if (Input.GetKeyUp(KeyCode.R)) padCover2.SetActive(false); 83 84 if (Input.GetKeyDown(KeyCode.T)) padCover3.SetActive(true); 85 if (Input.GetKeyUp(KeyCode.T)) padCover3.SetActive(false); 86 87 if (Input.GetKeyDown(KeyCode.Y)) padCover4.SetActive(true); 88 if (Input.GetKeyUp(KeyCode.Y)) padCover4.SetActive(false); 89 90 if (Input.GetKeyDown(KeyCode.U)) padCover5.SetActive(true); 91 if (Input.GetKeyUp(KeyCode.U)) padCover5.SetActive(false); 92 93 // 2段目 94 if (Input.GetKeyDown(KeyCode.D)) padCover6.SetActive(true); 95 if (Input.GetKeyUp(KeyCode.D)) padCover6.SetActive(false); 96 97 if (Input.GetKeyDown(KeyCode.F)) padCover7.SetActive(true); 98 if (Input.GetKeyUp(KeyCode.F)) padCover7.SetActive(false); 99 100 if (Input.GetKeyDown(KeyCode.G)) padCover8.SetActive(true); 101 if (Input.GetKeyUp(KeyCode.G)) padCover8.SetActive(false); 102 103 if (Input.GetKeyDown(KeyCode.H)) padCover9.SetActive(true); 104 if (Input.GetKeyUp(KeyCode.H)) padCover9.SetActive(false); 105 106 if (Input.GetKeyDown(KeyCode.J)) padCover10.SetActive(true); 107 if (Input.GetKeyUp(KeyCode.J)) padCover10.SetActive(false); 108 109 // 3段目 110 if (Input.GetKeyDown(KeyCode.C)) padCover11.SetActive(true); 111 if (Input.GetKeyUp(KeyCode.C)) padCover11.SetActive(false); 112 113 if (Input.GetKeyDown(KeyCode.V)) padCover12.SetActive(true); 114 if (Input.GetKeyUp(KeyCode.V)) padCover12.SetActive(false); 115 116 if (Input.GetKeyDown(KeyCode.B)) padCover13.SetActive(true); 117 if (Input.GetKeyUp(KeyCode.B)) padCover13.SetActive(false); 118 119 if (Input.GetKeyDown(KeyCode.N)) padCover14.SetActive(true); 120 if (Input.GetKeyUp(KeyCode.N)) padCover14.SetActive(false); 121 122 if (Input.GetKeyDown(KeyCode.M)) padCover15.SetActive(true); 123 if (Input.GetKeyUp(KeyCode.M)) padCover15.SetActive(false); 124 } 125} 126
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11242030101
Yhoo知恵袋で調べ、上記リンクに載っているコードを参考に作成しています。
補足
Unity6
Unity Hub 3.11.0
エディターバージョン
6000.0.33f1
回答1件
あなたの回答
tips
プレビュー