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

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

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

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

Q&A

解決済

2回答

357閲覧

ランダムに複数のオブジェクトを出す方法

sanmaguro

総合スコア7

C#

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

0グッド

0クリップ

投稿2018/04/26 06:54

編集2018/04/26 07:46

前提・実現したいこと

現在2Dのもぐらたたきを作っています

モグラが一定の高さまで飛んで降りてくる
ハンマーと当たれば爆発する
当たらなければそのまま初期位置まで落ちていく
以上の動作までできています

この動きをモグラ以外の動物をランダムで出てこさせたいと思っています
出てくる場所は固定です

現在、一つずつ同じ動きをする動物を複数作っています
この複数のオブジェクトを一定のリズムで、出てくる動物はランダムにする方法が知りたいです

説明が下手で申し訳ありませんがご教示ください

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

出てくる動物を決めるために**Random.Range(数値1, 数値2);**を使ってみてはどうでしょうか
一定のリズムの速さをspeedとします

C#

1public GameObject[] animal; 2public int animalint; 3 4public speed; 5private speed2; 6 7void Start () 8{ 9 speed2 = speed; 10 animalint = Random.Range(0, animalLength); 11} 12 13void Update () 14{ 15 speed2 -= Time.deltatime; 16 if (speed2 < 0) 17 { 18 speed2 = speed; 19 animalint = Random.Range(0, animal.Length); 20 Instantiate(animal[animalint], 出てくる場所, 回転(特に指定しない場合はQuaternion.identityでいいと思います)) 21 } 22}

animalには出現させたいGameObject(質問者の場合モグラ以外)をセットしてください(inspectorにanimalが出ます。それを開くとsizeが出てくるのでセットしたい数の数字を入力してください)

speedにはどのくらいの間隔で出現させるか指定してください(1だと1秒間隔。floatなので小数でもいいです)

speed2はstartでspeedと同じ数値にしてから、時間経過で減少させています。
これが0になったときに
animalintを決定し、
セットしたGameObjectを生成(animalintが出てくるGameObjectを決定している)し、
speed2の数値をspeedと一緒にします。

投稿2018/04/26 21:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sanmaguro

2018/04/27 04:39

詳しい説明とともにご回答いただきありがとうございます ランダムに出すことに成功いたしました
guest

0

C# ( Unityすら ) やったことありませんが。


私の読解力がアレなのか、ちょっとよくわかりません。

現在、一つずつ同じ動きをする動物を作っています

この複数のオブジェクトをランダムに一定のリズムで出す方法が知りたいです

どういう意味なのかがわからないです。

ランダムなのか、一定なのか...

例えば、

乱数発行で モグラ -> タヌキ -> 犬 -> ウサギ となったなら、

ウサギまでやったら次はモグラに戻って...みたいにするのか、

それとも完全にランダムなのか。

もし完全にランダムなら乱数発行し、

0のとき: もぐら
1のとき: うさぎ
2のとき: 犬
...

みたいにif文とかでふるい分けする。


[追記1]

コードも無いし、私自身はUnityはやっていないので妄想ですが。

私なら、

例えば UML風に書くと

[ Monster ] - name : String - id : int + CONSTRUCTOR( name : String, id : int ) + name() : String + id() : int + isHit() : bool

おおざっぱに書くと、

C#

1class Monster{ 2 private String name; // 実際に格納するフィールド 3 public String Name{ // プロパティ 4         get{ return this.name; } 5 } 6 public Monster( String name, int id ){ /* コンストラクタ */ } 7 isHit(){ 8 if( name.Equals( "モグラ" ) )return true; 9 return false; 10 } 11}

みたいにして、クラス化。

isHitメンバ ( メソッド ) は name もしくはidが"モグラ"ならtrueを返し、それ以外ならfalseを返す

みたいにオブジェクトに管理させる。

で、ここまでは多分同じじゃないかな。

次に「どのオブジェクトを出現させるか」みたいな管理クラスを設ける。

少なくとも List<Monster> mosters をフィールドとして保持し、乱数を発行したときに その番号のmonsterを出現させる...みたいにする。

投稿2018/04/26 07:02

編集2018/04/26 09:53
BeatStar

総合スコア4958

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

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

sanmaguro

2018/04/26 07:19

私の書き方で混乱させてしまいすみません 例えば1.2.3というオブジェクトがある状態から 一定のリズムで飛び出すが、出てくるものが1.2.3のどれがでてくるかはランダムで ということを書きたかったのですが申し訳ありません if文でふるい分けをしてみようと思います ありがとうございました
BeatStar

2018/04/26 09:40

ちょっと追記します。
sanmaguro

2018/04/27 04:36

ありがとうございます、参考にさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問