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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1274閲覧

左右反転時の生成位置の調整

omochixi

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/08/22 05:26

<動作など>

「↑」を押しつづけた分、ゲームオブジェクトcatが銃を撃ちまくって
(銃弾はcatの座標の斜め上から生成されるようにしています、そしてある高さで銃弾はオブジェクト破棄されるようになっています。)
上から降ってくる矢と銃弾が衝突すると矢のオブジェクトを破棄するという感じになっています。

<質問内容>

catが左右反転したときに(銃を左手に持った時)銃弾の生成位置も正しく反転されるように
(catのx座標 -0.4f, catのy座標 + 0.7f, catのz座標 にしたいです)
するにはどうコードをかけば良いですか? 回答よろしくお願いします。

※当たり判定部分は省略しています。
Newtralではなく正しくはNeutralですが放置してます。(動作確認済み)

//catにアタッチしたスクリプトです。 public class PlayerController : MonoBehaviour { Rigidbody2D rigid2D; Animator animator; float jumpForce = 680.0f; float walkForce = 30.0f; float maxWalkSpeed = 2.0f; public GameObject BulletPrefab; void Update() { // ジャンプする if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0) { this.animator.SetTrigger("JumpTrigger"); this.rigid2D.AddForce(transform.up * this.jumpForce); } // 左右移動 int key = 0; if (Input.GetKey(KeyCode.RightArrow)) { key = 1; this.animator.SetTrigger("ToWalkTrigger"); } if (Input.GetKey(KeyCode.LeftArrow)) { key = -1; this.animator.SetTrigger("ToWalkTrigger"); } // プレイヤの速度 float speedx = Mathf.Abs(this.rigid2D.velocity.x); // スピード制限 if (speedx < this.maxWalkSpeed) { this.rigid2D.AddForce(transform.right * key * this.walkForce); } // 動く方向に応じて反転 if (key != 0 && !Input.GetKey(KeyCode.UpArrow)) { transform.localScale = new Vector3(key, 1, 1); } //neutral時 if (key == 0) { this.animator.SetTrigger("ToNewtralTrigger"); } // 背を向けて銃撃つ if (Input.GetKey(KeyCode.UpArrow) && this.rigid2D.velocity.y == 0) { this.animator.SetTrigger("BackTrigger"); GameObject go = Instantiate(BulletPrefab); go.transform.position = new Vector3(transform.position.x +0.4f, transform.position.y + 0.7f, transform.position.z); }

イメージ説明
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

プログラムで座標の値を指定するのではなく、目印となるオブジェクトを置いてそこから弾を発射すればよいでしょう。

コード

csharp

1using UnityEngine; 2 3public class Human : MonoBehaviour 4{ 5 [SerializeField] float m_shootInterval = 0.3f; 6 [SerializeField] GameObject m_bulletPrefab = default; 7 /// <summary>ここから弾が出る</summary> 8 [SerializeField] Transform m_muzzle = default; 9 float m_timer = 0; 10 11 void Update() 12 { 13 m_timer += Time.deltaTime; 14 15 if (m_timer > m_shootInterval) 16 { 17 m_timer = 0; 18 Shoot(); 19 } 20 } 21 22 void Shoot() 23 { 24 Instantiate(m_bulletPrefab, m_muzzle.position, Quaternion.identity); 25 } 26 27 public void SwapX() 28 { 29 Vector3 scale = this.transform.localScale; 30 scale.x *= -1; 31 this.transform.localScale = scale; 32 } 33} 34

動いている様子
イメージ説明

動くパッケージ
tt355545.unitypackage

投稿2021/08/22 06:44

bboydaisuke

総合スコア5308

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

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

omochixi

2021/08/24 04:47

ありがとうございます! やってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問