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

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

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

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

Q&A

0回答

1397閲覧

Unity3D : 砲弾がプレイヤーオブジェクト/地面に当たった瞬間、Rigidbodyの影響を受けずに爆発パーティクルを表示する方法

idonishi

総合スコア0

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

0グッド

0クリップ

投稿2021/04/04 11:17

実現したいこと

現在フライトシュミレーションゲームを作成しています。
エネミー側が使用する砲弾の仕様について以下のように実現したいです。

OnColliderEnterで接触判定をし、Rigidbodyの影響を受けることなくプレイヤーやオブジェクトにHitした時点でパーティクルを再生する

砲弾オブジェクトはRigidbody(UseGravity = true)をAddForce(ForceMode.Impulse)で射出しOnColliderEnterでHit判定しています。
そうするとHitした瞬間砲弾が当たったプレイヤーオブジェクトは彼方に吹き飛びます。

ですが接触した時に吹き飛ばない仕様にしたいです。
砲弾は弧を描くように射出したいのでUseGravityを使用したいです。

砲弾のRigidbody

イメージ説明

砲弾のソースコード

C#

1public class TurretBullet : MonoBehaviour 2{ 3 public float turretBulletSpeed = 0.0f; 4 5 private TrailRenderer trail; 6 7 public Rigidbody bulletR; 8 9 10 public void Awake() 11 { 12 bulletR = GetComponent<Rigidbody>(); 13 trail = GetComponent<TrailRenderer>(); 14 } 15 16 private void OnEnable() 17 { 18 //Rigidbodyを初期化 19 bulletR.velocity = Vector3.zero; 20 //TrailRendererを初期化 21 trail.Clear(); 22 23 //出現後一定時間で非表示にする 24 StartCoroutine(BulletInvisible()); 25 //弾を前進させる 26 bulletR.AddForce(transform.forward * turretBulletSpeed, ForceMode.Impulse); 27 } 28 29 private void OnCollisionEnter(Collision collision) 30 { 31 if (collision.gameObject.tag == "Ground" || collision.gameObject.tag == "Player") 32 { 33 this.gameObject.SetActive(false); 34 ParticlePool.instance.GetExplosion(transform.position, transform.rotation); 35 } 36 } 37 38 private IEnumerator BulletInvisible() 39 { 40 yield return new WaitForSeconds(5); 41 this.gameObject.SetActive(false); 42 } 43}

試したこと

  • 接触判定をOnColliderEnterでなくOnTriggerEnterでなら砲弾のRigidbodyの影響を受けることはないのですが、

砲弾の爆発パーティクルが地面の中や、プレイヤーを通り越してからの表示になってしまうのでプレイヤー画面からでは当たったのかよくわからなくなり、あまり良くない見栄えになってしまいました。

  • 砲弾を射出と判定の2つのオブジェクトに分割し、親オブジェクトのRigidbodyを射出用(colliderなし)、子オブジェクトのColliderを判定用に(IsTrigger = false)、Rigidbodyはmassを0.01に設定しました、がプレイヤーオブジェクトは吹き飛んでしまいました。

  • プレイヤーオブジェクトのRigidbodyのMassを大きくする。元の10倍ぐらいにしても同じように吹き飛びました。

  • まだ試していないですが、プレイヤーオブジェクトに判定を移すという方法も考えましたが、後々砲弾の種類が増えたりするかもしれないので、調節が難しくなりそうだということと、やはりRigidbodyそのものを受けるのでどうしても吹き飛んでしまうきがするので、試していません。

環境情報など

・Unity 2019.3.

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問