using UnityEngine; public struct Inputs { public Vector2 PlayerMove; } public class InputContoller { public static void UpdateInput(ref Inputs input) { input.PlayerMove.x = Input.GetAxisRaw("Horizontal"); input.PlayerMove.y = Input.GetAxisRaw("Vertical"); } } public class PlayerMove : MonoBehaviour { // 컴포넌트 프로퍼티 public Rigidbody2D rb { get; private set; } // SPUM_Prefabs를 가져옵니다. private SPUM_Prefabs spumPrefab; private float maxSpeed; private Inputs _inputs; public Inputs Inputse => _inputs; // 이동 관련 변수 [SerializeField] private float speed = 5f; [SerializeField] public int hp = 5; private bool isFacingRight = false; private int currentAnimationState = -1; private Animator animator; void Awake() { // 1. Rigidbody2D 할당 rb = GetComponent(); // 2. 부모 오브젝트에 붙어 있는 SPUM_Prefabs를 가져옵니다. spumPrefab = GetComponentInParent(); if (spumPrefab == null) { Debug.LogError($"{gameObject.name} 오브젝트에 SPUM_Prefabs 컴포넌트가 없습니다! 인스펙터를 확인하세요."); } // 캐릭터 방향 기본 오른쪽 설정 Vector3 initialScale = transform.localScale; initialScale.x = Mathf.Abs(initialScale.x); transform.localScale = initialScale; animator = GetComponentInChildren(); } private void Update() { InputContoller.UpdateInput(ref _inputs); // 좌우 방향 전환 (Flip) if (_inputs.PlayerMove.x < 0f && isFacingRight) { Flip(); } else if (_inputs.PlayerMove.x > 0f && !isFacingRight) { Flip(); } // 애니메이션 업데이트 호출 if (_inputs.PlayerMove.x != 0f || _inputs.PlayerMove.y != 0f) { animator.SetBool("1_Move", true); } else { animator.SetBool("1_Move", false); } if (Input.GetKeyDown(KeyCode.Z)) { animator.SetTrigger("2_Attack"); } } void FixedUpdate() { Move(); } private void Move() { if (rb == null) return; rb.linearVelocity = new Vector2(_inputs.PlayerMove.x * speed, rb.linearVelocity.y); } private void Flip() { isFacingRight = !isFacingRight; Vector3 scale = transform.localScale; scale.x *= -1f; transform.localScale = scale; } }