前提・実現したいこと
GungeonやNuclear Throneのような、見下ろし型弾幕シューティングゲームが作りたく、UnityとC#を最近始めました。
実装したいことは、プレイヤーのスプライトをマウスカーソルの位置の方向に向けて、Y軸を軸に右と左に反転することです。そして、武器のスプライトをプレイヤーのチャイルドとして、マウスカーソルの位置に向けて回転することです。
発生している問題・エラーメッセージ
武器のスプライトをプレイヤーのチャイルドにした時、プレイヤーのスプライトは問題なくカーソルの位置に応じて反転するが、武器のスプライトが右方向にしか回転しないことです。Gifの容量を抑えるためにオプティマイズしたため、画質が荒く大変見にくくて恐縮ですが、カーソルが左側にあるのにもかかわらず、武器のスプライトが右に向いているのがわかると思います。
該当のソースコード
C#
1**プレイヤーのスクリプト** 2public class Movement : MonoBehaviour 3{ 4 public float speed; 5 private Rigidbody2D rb; 6 Vector2 movement; 7 public bool facingRight = true; 8 9 // Update is called once per frame 10 private void Awake() 11 { 12 rb = GetComponent<Rigidbody2D>(); 13 } 14 15 void Update() 16 { 17 movement.x = Input.GetAxisRaw("Horizontal"); // player movement function 18 movement.y = Input.GetAxisRaw("Vertical"); // player movement function 19 20 var delta = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; // player look at the mouse position 21 22 if (delta.x >= 0 && !facingRight) 23 { // mouse is on Right side of player 24 transform.localScale = new Vector3(1, 1, 1); // or activate look right some other way 25 facingRight = true; 26 } 27 else if (delta.x < 0 && facingRight) 28 { // mouse is on left side 29 transform.localScale = new Vector3(-1, 1, 1); // activate looking left 30 facingRight = false; 31 } 32 } 33 34 35 36 private void FixedUpdate() 37 { 38 movement.Normalize(); 39 rb.velocity = new Vector2(movement.x * speed * Time.fixedDeltaTime, movement.y * speed * Time.fixedDeltaTime); 40 } 41}
C#
1**武器のスクリプト** 2public class GunRotation : MonoBehaviour 3{ 4 // Gun Rotation Function 5 public float offset; 6 private SpriteRenderer spriteRender; 7 8 9 // Start is called before the first frame update 10 void Start() 11 { 12 spriteRender = GetComponent<SpriteRenderer>(); 13 } 14 15 16 // Update is called once per frame 17 void Update() 18 { 19 // Gun Rotation Function 20 Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; 21 float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg; 22 transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset); 23 24 if (rotZ < 89 && rotZ > -89) 25 { 26 Debug.Log("Facing right"); 27 spriteRender.flipY = false; 28 } 29 else 30 { 31 Debug.Log("Facing left"); 32 spriteRender.flipY = true; 33 } 34 } 35}
試したこと
武器のスプライトをプレイヤーから外したところ、プレイヤーと武器の両方が問題なく反転および回転したため、プレイヤーの反転が武器スプライトの回転機能に何らかの影響を及ぼしているのではないかと考えています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。