現在Unityにてキャラクターを移動させ、落ちてきたアイテムを拾いスコアを稼ぐゲームを作成しています。
この落ちてくるアイテムがほかのオブジェクトに接触したときの記述を、 OnTriggerEnter2Dを利用してプレイヤーにアタッチしているスクリプトとアイテムにアタッチしているスクリプトに二分して書いているのですが、どうにもまとまりがないコードになってしまっているように感じます。
どれも落ちてきたアイテムに関する記述なのでアイテム側のスクリプトにまとめて書いてしまったほうがいいのでしょうか?
それとも、当たり判定に関する処理だけを記述した他クラスを作ったほうが良いのでしょうか?
その他こうしたほうが分かりやすい、というやり方がありましたらアドバイスいただけますと幸いです。何卒よろしくお願いいたします。
C#
1//プレイヤーにアタッチしているスクリプト 2void OnTriggerEnter2D(Collider2D collision) 3 { 4 //プレイヤーがゲームオーバーになっていなければアイテムとの当たり判定を取る 5 if (!_gameOver) 6 { 7 if (collision.gameObject.tag == "Meron") 8 { 9 _meron.PlayOneShot(_meron.clip); 10 //メロンのアイテムと当たったらスコア加算 11 StartCoroutine(uiController.PlusScoreSetActive(10)); 12 scorecontroller.ScorePlus(collision.gameObject); 13 Destroy(collision.gameObject); 14 } 15 16 if (collision.gameObject.tag == "SpecialMeron") 17 { 18 _specialMeron.PlayOneShot(_specialMeron.clip); 19 StartCoroutine(uiController.PlusScoreSetActive(100)); 20 scorecontroller.ScorePlus(collision.gameObject); 21 modeManager.MaxMode = true; 22 modeManager.ItemDrop = false; 23 Destroy(collision.gameObject); 24 } 25 } 26 }
C#
1//アイテムにアタッチしているクリプト 2void OnTriggerEnter2D(Collider2D collision) 3 { 4 //床より下に行ったら削除 5 if (collision.gameObject.tag == "DestroyFloor") 6 { 7 Destroy(gameObject); 8 } 9 10 switch (_item_type) 11 { 12 case ITEM_TYPE.MERON_TYPE: 13 //アイテムが床についたらゲームオーバー 14 if(!_modeManager.MaxMode && _modeManager.ItemDrop ) { 15 if (collision.gameObject.tag == "Floor") 16 { 17 _bad.PlayOneShot(_bad.clip); 18 _playerController.GameOver = true; 19 } 20 } 21 break; 22 case ITEM_TYPE.ONIGIRI_TYPE: 23 //プレイヤーに当たったらゲームオーバー 24 if (collision.gameObject.tag == "Player") 25 { 26 _bad.PlayOneShot(_bad.clip); 27 _playerController.GameOver = true; 28 } 29 //床についたら削除 30 if (collision.gameObject.tag == "Floor") 31 { 32 Destroy(gameObject); 33 } 34 break; 35 } 36 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/12 11:42
2019/10/16 16:37