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

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

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

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

Q&A

解決済

1回答

570閲覧

Unity シューティング 弾のグラフィックが意図しない挙動をしてしまう

pppooo

総合スコア3

Unity

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

0グッド

0クリップ

投稿2020/07/10 13:09

編集2020/07/10 17:03

https://codegenius.org/open/courses/17/sections/29

上記サイト様を参考にして、シューティングゲームを作りたいです。

敵弾のグラフィックを制作する段階で、チュートリアルのように「3Dobject」→「Sphere」から作るのではなく、弾の画像をインポートしそれを敵弾のグラフィックとして使いたいと考えました。

取り込んだ画像のTexture TypeをSprite(2D and UI)に変更し、RigidBodyとSphereColliderをアタッチして、「3Dobject」→「Sphere」から作ったものと同じように弾のPrefabを作りました。

そして、このPrefabを以下のスクリプト(敵機オブジェクトにアタッチ済)のenemyMissilePrefabに設定してゲームを実行してみました。

C#

1 2public class EnemyFireMissile : MonoBehaviour 3{ 4 public GameObject enemyMissilePrefab; 5 public float missileSpeed; 6 private int timeCount = 0; 7 8 void Update() 9 { 10 timeCount += 1; 11 12 if (timeCount % 60 == 0) 13 { 14 GameObject enemyMissile = Instantiate(enemyMissilePrefab, transform.position, Quaternion.identity); 15 16 Rigidbody enemyMissileRb = enemyMissile.GetComponent<Rigidbody>(); 17 18 enemyMissileRb.AddForce(transform.forward * missileSpeed); 19 20 Destroy(enemyMissile, 3.0f); 21 } 22 } 23}

すると、発射された敵弾は、ペラペラの紙がくるくると回るように飛んできてしまいました。
以下gif画像です。
イメージ説明
そうではなく、一般的な2Dシューティングのように、弾が常に真上(カメラ)の方を向きながら飛んでくるようにしたいです。
もしくは、どうして回転してしまうのかの理由が知りたいです。

・試したこと
弾を発生させているオブジェクトのColliderを消してみる
弾にアタッチされているRigidBodyのConstraintからFreeze Rotationにチェックを入れてみる
弾にビルボード機能を持たせてみる

よろしければ解決方法を教えていただきたいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

足りない情報から推測しますけど、多分弾が生成された瞬間に弾を発射しているものと衝突して回転が与えられているんでしょうね。
それで、弾自体は「球体」ではなくて「ペラペラの絵に立体の衝突判定を追加したオブジェクト」だから回転すると変な感じになるんでしょう。

弾にアタッチされた Rigidbody の Constraint で Rotation を全部制限して、それでもうまくいかないなら弾をビルボードにする(※)ととりあえず現状よりはましになるんじゃないかと思います。

だけど多分それができたとしてもまたいろいろとこうしたい(自分の理想と違う)が出てくると思うので、そうしたらまた問題を立てて質問したらいいと思います。

あとはこういう問題の場合は問題発生時の gif 動画くらいは欲しいですね。

(※)【Unity】ビルボードで常にカメラの方に向く木を作る

投稿2020/07/10 13:31

bboydaisuke

総合スコア5308

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

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

pppooo

2020/07/10 17:55

回答ありがとうございます。ご指摘を受けた通り、弾のスプライトをより問題の挙動が分かりやすい形に差し替えた上でgif画像を用意しましたので、よろしければご確認ください。 弾を発射しているオブジェクトの当たり判定を消す→挙動に変化なし 弾のFreezeRotationにチェックを入れる→挙動に変化なし 弾をビルボードにする→挙動に変化はあったが、結局回転はする 全て試してみましたが上手くいきませんでした。 さらに自分なりに考えてみたところ、どうやらInstantiateで弾が生成されている時点で弾の角度がおかしくなっていることが分かりました。Quaternion.identityの部分が怪しいと考え、 Quaternion rote = Quaternion.Euler(90.0f, 0.0f, 0.0f); GameObject enemyMissile = Instantiate(enemyMissilePrefab, transform.position, rote); と書き換えたところ、思い通りの挙動となりました。 次回質問を投稿する際は、もう少し分かりやすく質問をするように心がけます、重ね重ねになりますが、解答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問