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

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

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

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

Unity

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

Q&A

解決済

1回答

814閲覧

playerの向きで場合分けしたい

CPU

総合スコア13

C#

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

Unity

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

0グッド

0クリップ

投稿2020/12/19 02:59

僕は2Dゲームを作っていて、自分が右を向いている時は右に、自分が左を向いている時は左に球を発射したいです。
ですが、僕はplayerが左を向いている時というスクリプトを知らないので教えてくれませんか?
僕はplayerの方向を、scaleを-1倍にして変えています。
球を発射する仕方は知っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

弾の発射口をプレイヤーの子オブジェクトにしておけば、スケーリングで反転していたとしても弾の発射口も反転されるのでいいんじゃないでしょうか?

追記

弾を飛ばす処理について、何やら複雑なことをしているようです。
弾を生成して飛ばしてしまうのが楽だと思うので試してみてください。

【前準備】

  1. 弾用のオブジェクトを用意
  2. 弾オブジェクトに任意のコライダーとRigidbody2Dをアタッチ

(2-a. 弾が重力の影響を受けないならGravity Scaleを0に)

【コード記述】

C#

1// 弾のプレファブ 2public GameObject bullet; 3 4// 弾攻撃 5void BulletAttack () { 6 // 弾を生成 7 var _b = Instantiate(bullet, /*省略*/); 8 // 生成した弾からRigidbody2Dを取得 9 Rigidbody2D rb2d = _b.GetComponent<Rigidbody2D>(); 10 11 // 飛ばす(強さなどは適当です) 12 rb2d.AddForce(player.transform.forward * 10f); 13}

コードは手打ちなので、誤字脱字あったらすみません……。

投稿2020/12/19 03:21

編集2020/12/22 15:40
PinoMatcha

総合スコア368

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

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

CPU

2020/12/19 04:15

ありがとうございます。 発射口の反転は分かりました。 ですが、僕のスクリプトではscaleで反転しても球の発射する方向が右のままなので困っています。 僕は球のスクリプトをtransform.position += new Vector3(2f,0,0)*Time.deltaTime; として、 playerのスクリプトで Instantiate(bulletPrefab, firePoint.position, transform.rotation); として出現させているため、 右にしか行かないのですが、どうしたら良いですか?
PinoMatcha

2020/12/19 15:59 編集

発射する方向を「プレイヤーの正面」にしてみては? 細かく言うと、new Vector3(2f,0,0)ではなく player.transform.forward*2 ですね。
PinoMatcha

2020/12/19 16:00 編集

ただこの場合、プレイヤーが方向転換すると弾の進む方向も転換されてしまいますが…。 もし、もっと掘り下げた解決策が欲しいのであればソースコードを貼っていただけると助かります。
CPU

2020/12/22 12:16

ありがとうございます。 using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using UnityEngine; public class ugoki : MonoBehaviour { public FixedJoystick joystick; public Transform _LGroundCheck; public Transform _RGroundCheck; public bool _Grounded = false; public LayerMask _GLayer; private Animator anim = null; bool tkou; public Transform lfirepoint; public GameObject fire; private float timeBetweenshot = 0.2f; private float timer; private Transform _lfirepoint; public void tuujouButtonUp() { tkou = false; } public void tuujouButtonDown() { tkou = true; } void Start() { _LGroundCheck = transform.Find("lgroundcheck"); _RGroundCheck = transform.Find("rgroundcheck"); anim = GetComponent<Animator>(); _lfirepoint = transform.Find("lfirepoint"); } void Update() { //時間 timer += Time.deltaTime; _Grounded = Physics2D.Linecast(_LGroundCheck.transform.position, _RGroundCheck.transform.position, _GLayer); float x = joystick.Horizontal; float y = joystick.Vertical; transform.position += new Vector3((float)(x * 0.02), 0, 0); if (y > 0.71) { transform.position += new Vector3(0, (float)(y * 0.025), 0); } if (y < -0.71 && !_Grounded) { transform.position += new Vector3(0, (float)(y * 0.025), 0); } //走る if (x > 0.71 && _Grounded) { transform.localScale = new Vector3(-2, 2, 0); anim.SetBool("run", true); } else if (x < -0.71 && _Grounded) { transform.localScale = new Vector3(2, 2, 0); anim.SetBool("run", true); } else { anim.SetBool("run", false); } //走る終わり //火攻撃 if (tkou == true && timer > timeBetweenshot ) { timer = 0.0f; Instantiate(fire, lfirepoint.position,transform.rotation); } } } これをplayerに貼っています。
PinoMatcha

2020/12/22 15:40

回答に追記しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問