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

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

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

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

Q&A

解決済

1回答

4048閲覧

unity 銃の弾の飛ばし方について

yoshiteru21

総合スコア44

Unity

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

0グッド

0クリップ

投稿2019/11/20 05:48

弾を真っすぐ飛ばしたいのですが、普通の状態で弾を飛ばすと真っすぐ飛ぶのですがジャンプ中だと斜めに飛ぶようになります。
どのような修正を加えればいかなる時でも真っすぐ飛ぶようになるのでしょうか?

**ジャンプの処理** if (isJump == false && gameClear == false && WaitStop == false) { // スペースでジャンプ。 if (jumpCount < MAX_JUMP_COUNT && (Input.GetKeyDown("space") || Input.GetKeyDown("joystick button 0"))) { isJump = true; anim.SetBool("Charge", false); anim.SetTrigger("Jump"); } } float velY = rigidbody2D.velocity.y; bool isJumping = velY > 0.1f ? true : false; bool isFalling = velY < -0.1f ? true : false; anim.SetBool("isJumping", isJumping); anim.SetBool("isFalling", isFalling); if (isJump) { // 速度をクリアした2回目のジャンプも1回目と同じ挙動にする。 rigidbody2D.velocity = Vector2.zero; // ジャンプさせる。 rigidbody2D.AddForce(Vector2.up * force); // ジャンプ回数をカウント。 jumpCount++; // ジャンプを許可する。 isJump = false; // anim.SetBool("Jump", true); } コード
**銃を撃つanimationにこの処理を追加** void Bullet() //弾を生成 { Instantiate(bullet, transform.position + new Vector3(0f, 1.2f, 0f), transform.rotation); } コード
**生成された弾のプレハブに追加されているスクリプト** using UnityEngine; using System.Collections; public class BulletScript : MonoBehaviour { private GameObject player; private int speed = 10; void Start() { player = GameObject.FindWithTag("UnityChan"); //ユニティちゃんオブジェクトを取得 Rigidbody2D rigidbody2D = GetComponent<Rigidbody2D>(); //rigidbody2Dコンポーネントを取得 //ユニティちゃんの向いている向きに弾を飛ばす rigidbody2D.velocity = new Vector2(speed * player.transform.localScale.x, 0); //画像の向きをユニティちゃんに合わせる Vector2 temp = transform.localScale; temp.x = player.transform.localScale.x; transform.localScale = temp; //5秒後に消滅 Destroy(gameObject, 5); } //********** 開始 **********// void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.tag == "Enemy") //Enemyに衝突すれば弾削除 { Destroy(gameObject);  } } private void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.tag == "Enemy")//Enemyに衝突すれば弾削除 { Destroy(gameObject); } } //********** 終了 **********// } コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードには問題無さそうでしたので実際試してみました。
こちらでテストする限りではジャンプ中でも問題無く横に真っすぐ射出されます。

別の所に問題が有るのではないでしょうか?

・テスト動画
http://153.122.22.14/224348.mp4

推測になりますが下記問題が無いかチェックしてみて下さい。
・弾と操作キャラのコリダーが少しだけ接触していて上下方向の慣性が加えられている
・省略されている別のコードに問題がある
・省略されているコンポーネント設定に問題がある

投稿2019/11/20 13:08

編集2019/11/20 13:57
Hawn

総合スコア1222

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

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

yoshiteru21

2019/11/21 02:05

ご指摘された通り調べたところうまくいきました、ありがとうございます。 RigidbodyのFreezePositionが固定されていなかったというごく単純なものでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問