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

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

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

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

Unity

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

Q&A

解決済

1回答

516閲覧

棘を一気に6個生成して、一個ずつホーミングしたい

siiii

総合スコア10

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2022/04/26 01:10

編集2022/04/26 01:19

前提

Unityの3Dで敵を作っています。棘を一気に6個生成して、一個ずつホーミングしたいのですが、一気に生成してしまうと、ホーミングが同じ時間にしてしまうため、今は一個ずつ生成するようにして、生成したタイミングから6秒たったらホーミングする動きにしています。何かいい案があったら教えてください。

実現したいこと

棘を一気に6個生成して、一個ずつホーミングしたい

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

エラーメッセージ

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Enemy_homing : MonoBehaviour 6{ 7 public GameObject player; //プレイヤー 8 public GameObject ball; //プレハブ 9 float period = 2f; //着地時間 10 Vector3 velocity; //速度 11 12 public GameObject[] pos = new GameObject [6]; //生成位置格納 13 14 void Start() 15 { 16 transform.LookAt(player.transform); 17 18 StartCoroutine(FuncCoroutine()); 19 } 20 21 void Update() 22 { 23 //プレイヤーの方向を見る 24 transform.LookAt(player.transform); 25 } 26 27 IEnumerator FuncCoroutine() 28 { 29 //6個生成 30 for (int i = 0; i < pos.Length; ++i) 31 { 32 yield return new WaitForSeconds(1.0f); 33 34    Instantiate(ball, pos[i].transform.position,    Quaternion.identity); 35 36 } 37 } 38} 39 40 41プレハブのほうにホーミングの処理をかいています。 42 43//プレハブ 44using System.Collections; 45using System.Collections.Generic; 46using UnityEngine; 47 48public class Homing : MonoBehaviour 49{ 50 Rigidbody rb; //rigidbodyを入れる変数 51 Vector3 velocity; //速度 52 public Vector3 acceleration; //加速度 53 private GameObject player; //プレイヤー 54 float period = 5f; //着弾時間 55 56 private void Start() 57 { 58 player = GameObject.Find("Player"); 59 rb = GetComponent<Rigidbody>(); 60 } 61 62 void Update() 63 { 64 StartCoroutine(Hom()); 65 } 66 67 private void FixedUpdate() 68 { 69 // 移動処理 70 rb.MovePosition(transform.position + velocity * Time.deltaTime); 71 } 72 73 private void OnCollisionEnter() 74 { 75 ///何かに当たったら自分自身を削除 76 Destroy(this.gameObject); 77 } 78 79 IEnumerator Hom() 80 { 81 yield return new WaitForSeconds(6); // 6秒間待機 82 83 //加速度を0 84 acceleration = Vector3.zero; 85 86 //ターゲットと自分自身の差 87 var diff = player.transform.position - transform.position; 88 89 //加速度求める 90 acceleration += (diff - velocity * period) * 2f / (period * period); 91 92 93 //加速度が一定以上だと追尾を弱くする 94 if (acceleration.magnitude > 100f) 95 { 96 acceleration = acceleration.normalized * 100f; 97 } 98 99 // 着弾時間を徐々に減らしていく 100 period -= Time.deltaTime; 101 102 // 速度の計算 103 velocity += acceleration * Time.deltaTime; 104 } 105} 106 107

試したこと

生成にコルーチンを使って1秒ずつにし、6秒待ったらホーミングする

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

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

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

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

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

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

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

bboydaisuke

2022/04/30 01:53

弾を違う位置に生成すればいいんじゃないでしょうか。扇状とか。
siiii

2022/05/10 16:52

ありがとうございます。解決しました。
guest

回答1

0

自己解決

リストに生成したトゲを格納することで解決しました。

投稿2022/05/10 16:52

siiii

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問