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

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

ただいまの
回答率

90.48%

  • C#

    7449questions

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

  • Unity2D

    925questions

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 287

sanmaguro

score 1

 前提・実現したいこと

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

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

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

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

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

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

エラーメッセージ

 該当のソースコード

ソースコード

 試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

public GameObject[] animal;
public int animalint;

public speed;
private speed2;

void Start ()
{ 
    speed2 = speed;
    animalint = Random.Range(0, animalLength);
}

void Update ()
{
    speed2 -= Time.deltatime;
    if (speed2 < 0)
    {
        speed2 = speed;
        animalint = Random.Range(0, animal.Length);
        Instantiate(animal[animalint], 出てくる場所, 回転(特に指定しない場合はQuaternion.identityでいいと思います))
    }
}

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/27 13:39

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

    キャンセル

+1

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

おおざっぱに書くと、

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

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/26 16:19

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

    if文でふるい分けをしてみようと思います
    ありがとうございました

    キャンセル

  • 2018/04/26 18:40

    ちょっと追記します。

    キャンセル

  • 2018/04/27 13:36

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • C#

    7449questions

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

  • Unity2D

    925questions