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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

1343閲覧

Unity 二つのスポーンから違う色のオブジェクトを生成

kurira

総合スコア28

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/05/12 01:51

###やりたいこと

赤スポーンと青スポーンが用意されていて、クリック毎にどちらか一方からランダムに設定された色のBallが生成される。
なお、BallのPrefabは一つで生成したい

###現状

空のオブジェクトを二つ設置し、どちらにも以下のスクリプトをアタッチしている。

public class Ball : MonoBehaviour { public GameObject obj; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { Instantiate(obj); } } }

###疑問点

クリック毎に、ランダムなスポーンから指定通りの色でBallを生成するにはどうしたらよいのか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

思いついたアプローチは2つです。
・スポーンを1つにして、生成場所の候補を複数登録する。
・スポーンを2つにして、さらにスポーンを管理するクラスを作る

#スポーンを1つにして、生成場所の候補を複数登録する。
スポーン位置さえわかれば、そのうちどっちか片方を使えば良いことになります

cs

1public class Ball : MonoBehaviour 2{ 3 public GameObject obj; 4 public Transform[] spawnPos; // 生成する位置の候補をインスペクターからアタッチ 5 6 void Update() 7 { 8 if (Input.GetMouseButtonDown(0)) 9 { 10 var _obj = Instantiate(obj); 11 var _seed = Random.Range(0, spawnPos.Length); // 配列の数で乱数を作る 12 _obj.transform.position = spawnPos[_seed].position; // 生成したオブジェクトの位置を変更する 13 _obj.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); // 色をランダムに変更する(別にこのやり方じゃなくてもいいです) 14 } 15 } 16}

#スポーンを2つにして、さらにスポーンを管理するクラスを作る
「どちらか一方」という目的を簡単に達成するためには

■ スポーンを管理するクラス
├ Spawn1
└ Spawn2

といった構成にしたほうが楽だと思います。こうすればどちらか一方を判断する処理と、ボールを生成する処理を分けられるので実装が楽になります。

まずスポーンを管理するballでは、メソッドを叩かれたらボールを生成する処理を書きます。

cs

1public class Ball : MonoBehaviour 2{ 3 public GameObject obj; 4 5 public void CreateBall(){ 6 var _obj = Instantiate(obj); 7 _obj.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); // 色をランダムに変更する(別にこのやり方じゃなくてもいいです) 8 } 9}

次に複数のballを管理するクラスを作ります。

cs

1public class BallManager : MonoBehaviour 2{ 3 public Ball[] balls; // ball をインスペクターからアタッチ 4 5 void Update() 6 { 7 if (Input.GetMouseButtonDown(0)) 8 { 9 if(balls.Length <= 0) return; // アタッチされてなかったら戻す 10 11 var _seed = Random.Range(0, balls.Length); // 配列の数で乱数を作る 12 balls[_seed].CreateBall(); // 乱数をもとにどちらかのボール生成メソッドを叩く 13 } 14 } 15}

デバッグしてないので動かないかもですが、ざっくり思いつくのはこういったアプローチでした

投稿2021/05/12 02:23

編集2021/05/12 02:29
hogefugapiyo

総合スコア3302

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

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

kurira

2021/05/13 06:34

ありがとうございます、参考にしてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問