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

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

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

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

Unity

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

Q&A

解決済

1回答

1232閲覧

Unity 3D 全方位射撃

ttc

総合スコア14

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2018/05/13 14:11

実現したいこと

Unity3Dで全方位の射撃(Prefab化した弾丸を射出)の作成をしています。
1あるいは2方向であれば、空オブジェクトを設置してそこに弾丸発射用スクリプトをアタッチすればいいのですが、全方位となあると、空オブジェクトをキャラクターの周りに大量につけるのは厳しいと考えました。

そこで、キャラクター周辺角度○○ずつに弾を発射( for (int rad = 0; rad < 360; rad += 6) を用いたりして発射)すればいいのかと考えましたが、このやり方ですと全方位と言いつつも、平面上にしか弾丸を発射できません。

どなたか空間上で全方位射撃をするゲームを作った方や全方位射撃ができるアイデアをお持ちの方はいらっしゃいませんか?
どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

思いついた手としては...

[追記]
あまり気負わずに、いろいろな思いつきを試してみるといいのではないでしょうか。
ご質問者さんのおっしゃる「キャラクター周辺角度○○ずつに弾を発射」もいい手だと思います。
これを水平方向だけでなく緯度・経度の2方向について応用すれば全方向に対応できるでしょう。
たとえばこんな感じに...

C#

1using UnityEngine; 2 3public class AllrangeCannon : MonoBehaviour 4{ 5 public float BulletSpeed = 10.0f; 6 public GameObject BulletPrefab; 7 8 public int HorizontalBulletCount = 12; 9 public float MuzzleOffset = 2.0f; 10 11 private void Shot() 12 { 13 var angleStep = 360.0f / this.HorizontalBulletCount; 14 this.ShotHorizontal(0.0f, this.HorizontalBulletCount); // 赤道方向に弾を発射 15 for (var angle = angleStep; angle < 90.0f; angle += angleStep) 16 { 17 this.ShotHorizontal(angle, this.HorizontalBulletCount); // 北緯angle°に弾を発射 18 this.ShotHorizontal(-angle, this.HorizontalBulletCount); // 南緯angle°に弾を発射 19 } 20 } 21 22 private void ShotHorizontal(float angleV, int maxCount) 23 { 24 angleV *= Mathf.Deg2Rad; // 緯度を弧度法による角度に変換 25 var cosAngleV = Mathf.Cos(angleV); 26 var sinAngleV = Mathf.Sin(angleV); 27 var count = (int)(cosAngleV * maxCount); // 緯度に合わせて弾数を減らす...緯線の長さは緯度のコサインに比例する 28 for (var i = 0; i < count; i++) 29 { 30 var angleH = (2.0f * Mathf.PI * i) / count; // 弧度法による経度 31 var cosAngleH = Mathf.Cos(angleH); 32 var sinAngleH = Mathf.Sin(angleH); 33 34 // 緯度、経度からVector3による方角を算出 35 var x = sinAngleH * cosAngleV; 36 var y = sinAngleV; 37 var z = cosAngleH * cosAngleV; 38 var direction = new Vector3(x, y, z); // この方角に弾を1発発射したい 39 40 // 以下、弾の発射方法についてはご質問者さんの設計に合わせて変えてみてください 41 var bullet = Instantiate( 42 this.BulletPrefab, 43 this.transform.position + (direction * this.MuzzleOffset), 44 Quaternion.LookRotation(direction)); 45 var rigidbody = bullet.AddComponent<Rigidbody>(); 46 rigidbody.useGravity = false; 47 rigidbody.constraints = RigidbodyConstraints.FreezeRotation; 48 rigidbody.AddForce(direction * this.BulletSpeed, ForceMode.VelocityChange); 49 } 50 } 51 52 private void Update() 53 { 54 if (Input.GetKeyDown(KeyCode.Space)) 55 { 56 this.Shot(); 57 } 58 } 59}

プレビュー

投稿2018/05/13 21:41

編集2018/05/14 22:36
Bongo

総合スコア10807

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

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

ttc

2018/05/14 07:19

ご回答ありがとうございます。 思った以上に難しいようで、自分のレベルがまだ到達していないように思えたので、今回は諦めようかと思います。 ご提案頂きましたアイデアは今後の参考にしたいと思います。
ttc

2018/05/19 10:33

追記を拝見しました。回答者様が提案してくださった方法は、自分がやりたいと思っていた射撃方法をほぼ再現しています。今まで平面座標でしか考えられなかったのですが、おかげさまで空間座標での考え方も少しですが分かるようになり、とても参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問