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

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

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

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

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

siiii
siiii

総合スコア10

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

-1評価

0クリップ

215閲覧

投稿2022/04/26 01:10

編集2022/05/11 01:52

前提

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

実現したいこと

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

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

エラーメッセージ

該当のソースコード

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy_homing : MonoBehaviour { public GameObject player; //プレイヤー public GameObject ball; //プレハブ float period = 2f; //着地時間 Vector3 velocity; //速度 public GameObject[] pos = new GameObject [6]; //生成位置格納 void Start() { transform.LookAt(player.transform); StartCoroutine(FuncCoroutine()); } void Update() { //プレイヤーの方向を見る transform.LookAt(player.transform); } IEnumerator FuncCoroutine() { //6個生成 for (int i = 0; i < pos.Length; ++i) { yield return new WaitForSeconds(1.0f);     Instantiate(ball, pos[i].transform.position,    Quaternion.identity); } } } プレハブのほうにホーミングの処理をかいています。 //プレハブ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Homing : MonoBehaviour { Rigidbody rb; //rigidbodyを入れる変数 Vector3 velocity; //速度 public Vector3 acceleration; //加速度 private GameObject player; //プレイヤー float period = 5f; //着弾時間 private void Start() { player = GameObject.Find("Player"); rb = GetComponent<Rigidbody>(); } void Update() { StartCoroutine(Hom()); } private void FixedUpdate() { // 移動処理 rb.MovePosition(transform.position + velocity * Time.deltaTime); } private void OnCollisionEnter() { ///何かに当たったら自分自身を削除 Destroy(this.gameObject); } IEnumerator Hom() { yield return new WaitForSeconds(6); // 6秒間待機 //加速度を0 acceleration = Vector3.zero; //ターゲットと自分自身の差 var diff = player.transform.position - transform.position; //加速度求める acceleration += (diff - velocity * period) * 2f / (period * period); //加速度が一定以上だと追尾を弱くする if (acceleration.magnitude > 100f) { acceleration = acceleration.normalized * 100f; } // 着弾時間を徐々に減らしていく period -= Time.deltaTime; // 速度の計算 velocity += acceleration * Time.deltaTime; } }

試したこと

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

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

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

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

bboydaisuke

2022/04/30 01:53

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

2022/05/10 16:52

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。