質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

679閲覧

オブジェクトの種類を判別し、得点し、削除する機構

menesisu

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/04/23 16:43

前提・実現したいこと

Unityを使用して、ゲームを開発しています。
ヒエラルキー上にプレハブから生成される「"ImageOrb(Clone)"」(以下オーブ)を削除し
そのオーブの種類によってゴールドが手に入る仕組みを作っています。

下記のようにオーブ種類を定義し、ボタンに"DestroyOrb()"を呼び出すようにしているのですが
ここから、コードを書けばよいかがわかりません。
ボタンを押し、オーブの種類を判別し、該当のゴールドを他のメソッドに投げ、オブジェクトを削除する。

申し訳ないのですが、おすすめの書き方などをご教示頂ければ幸いです。
何卒、ご助力くださいますようお願いいたします。

該当のソースコード

C#

1 public enum ORB_KIND //オーブの種類を定義 2 { 3 ORB1, 4 ORB2, 5 ORB3, 6 ORB4, 7 ORB5, 8 ORB6, 9 } 10 11 public void DestroyOrb() 12 { 13 switch (?????) 14 { 15 case ORB_KIND.ORB1: 16 gameManager.GetComponent<GameManager>().GetGold(100); 17 break; 18 19 case ORB_KIND.ORB2: 20 gameManager.GetComponent<GameManager>().GetGold(200); 21 break; 22 23 case ORB_KIND.ORB3: 24 gameManager.GetComponent<GameManager>().GetGold(300); 25 break; 26 27 case ORB_KIND.ORB4: 28 gameManager.GetComponent<GameManager>().GetGold(400); 29 break; 30 31 case ORB_KIND.ORB5: 32 gameManager.GetComponent<GameManager>().GetGold(500); 33 break; 34 35 case ORB_KIND.ORB6: 36 gameManager.GetComponent<GameManager>().GetGold(600); 37 break; 38 } 39 40 Destroy(trashOrb); 41 42 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

シンプルなのはオーブ自体に種類情報をもたせることでしょうか。
オーブのプレハブにアタッチする下記スクリプトではORB_KIND型のORB_KIND_TYPEというオーブ情報を持ちます。

Orb.cs

cs

1 public enum ORB_KIND //オーブの種類を定義 2 { 3 ORB1, 4 ORB2, 5 ORB3, 6 ORB4, 7 ORB5, 8 ORB6, 9 } 10 11 public ORB_KIND ORB_KIND_TYPE; // このオーブ自体が持つ種類データ 12 13 14 public void DestroyOrb() 15 { 16 switch (ORB_KIND_TYPE) 17 { 18 case ORB_KIND.ORB1: 19 gameManager.GetComponent<GameManager>().GetGold(100); 20 break; 21 22 case ORB_KIND.ORB2: 23 gameManager.GetComponent<GameManager>().GetGold(200); 24 break; 25 26 case ORB_KIND.ORB3: 27 gameManager.GetComponent<GameManager>().GetGold(300); 28 break; 29 30 case ORB_KIND.ORB4: 31 gameManager.GetComponent<GameManager>().GetGold(400); 32 break; 33 34 case ORB_KIND.ORB5: 35 gameManager.GetComponent<GameManager>().GetGold(500); 36 break; 37 38 case ORB_KIND.ORB6: 39 gameManager.GetComponent<GameManager>().GetGold(600); 40 break; 41 } 42 43 Destroy(trashOrb); 44 45 }

あとはインスタンス化する際にそれぞれのオーブに「君はこの種類のオーブなんだ」という情報をセットしてあげます。

cs

1 2 public GameObject prefab; // Orb.cs をアタッチしたオーブのプレハブをアタッチ 3 4 private void Start() { 5 var newObj = Instantiate(prefab) as GameObject; 6 newObj.GetComponent<Orb>().ORB_KIND_TYPE = Orb.ORB_KIND.ORB1; // オーブ種類1 7 8 var newObj2 = Instantiate(prefab) as GameObject; 9 newObj2.GetComponent<Orb>().ORB_KIND_TYPE = Orb.ORB_KIND.ORB2; // オーブ種類2 10 }

インスタンス化したあとに、OrbスクリプトのComponentをもってきてORB_KIND_TYPEを指定してあげます。位置指定してないので同じ位置に2個生成されると思いますが、Hierarchyから見るとORB1とORB2というようにそれぞれ違うStatusがセットされているかと思います。

投稿2019/04/24 00:35

hogefugapiyo

総合スコア3302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

menesisu

2019/04/25 01:43

ありがとうございました!いい感じに得点が取得できるようになりました。
guest

0

「自分のオーブ種類」を示す変数を1つ入れるだけかと。
ORB_KIND myOrbKind; //publicかprivateかは必要に応じて
switch (myOrbKind) { ~~~ }

投稿2019/04/24 00:25

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問