8080suisho / SNSTale

0 stars 0 forks source link

「ランダムに弾幕が生成できない」という質問の回答 #1

Open fukuchang opened 3 years ago

fukuchang commented 3 years ago

この質問の回答 https://lifeistech.slack.com/archives/C01KSKP7D53/p1614396694063500

確かにコルーチンが使えるとよりスマートに実装できると思いますー! ただ、コルーチンを使わなくても愚直に実装できたりしますよ〜

まずこのコードの問題点として

コメントを動かす処理 https://github.com/8080suisho/SNSTale/blob/fc854d38c1f53b722b03b73eb77002eb68947994/Assets/MainScripts/GameManager.cs#L84-L93

これが同じスクリプトに書かれているので、

  1. コメントを動かす処理は別でコメントをUpdate動かす用のスクリプトを作って、Comment1のオブジェクトにアタッチさせてPrefab化
  2. AppearComment1()で作ったComment1のオブジェクトをInstantiate();
  3. GameManagerでランダムの時間で以下のような関数を実行すればランダムなタイミングでランダムにコメントが生成される
    private void DanmakuGenerator() //弾幕を生成する関数
    {
    int randomTime = Random.Range(1, 5); //1~4をランダム
    if(randomTime == 1){
    AppearComment1();
    }else if(randomTime == 2){
    AppearComment2();
    }else if( ... ){
    ...
    ...
    }
    }

    すると一番最初で問題として取り上げた一度だけ同じタイミングで生成するというのがなくなると思いますー!

終了の変化の通知は正直めんどくさいと思いますし、オブジェクトの動きと生成の動きは別々にしてあげた方が複雑にならないで済むと思いますー!

fukuchang commented 3 years ago

このスレッドの回答をしますー! https://lifeistech.slack.com/archives/C01KSKP7D53/p1614423075068200?thread_ts=1614396694.063500&cid=C01KSKP7D53

それに関しては、Updateの中で秒数を数えて、オブジェクトを生成するたびにランダムの秒数を設定して、その設定した秒数を超えたらDanmakuGenerator()を生成するのはどうでしょうかー?

もちろん、秒数の設定とsecondsを0に更新するのはAppearComment1の関数が呼ばれた後になりますー!