오버플로우로 유니티 먹통되는 코드 수정
This commit is contained in:
@@ -32,6 +32,15 @@ public class PlayerMove : MonoBehaviour
|
||||
SpriteRenderer = GetComponent<SpriteRenderer>();
|
||||
Animator = GetComponent<Animator>();
|
||||
|
||||
// Null 체크 추가
|
||||
if (RigidBody == null || SpriteRenderer == null || Animator == null)
|
||||
{
|
||||
Debug.LogError("PlayerMove script requires Rigidbody2D, SpriteRenderer, and Animator components on the same GameObject.");
|
||||
// 게임 오브젝트 비활성화 또는 스크립트 비활성화
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Animator가 초기화된 후에 해시 값 할당
|
||||
_isJumping = Animator.StringToHash("isJumping");
|
||||
_isMoving = Animator.StringToHash("isMoving");
|
||||
|
||||
@@ -59,8 +59,6 @@ public class IdleState : IState
|
||||
public IdleState(PlayerMove player)
|
||||
{
|
||||
_player = player;
|
||||
_moveState = new MoveState(_player);
|
||||
_jumpState = new JumpState(_player);
|
||||
}
|
||||
|
||||
public void Enter()
|
||||
@@ -85,14 +83,13 @@ public class IdleState : IState
|
||||
|
||||
public IState CheckTransition()
|
||||
{
|
||||
// 우선 순위: Jump -> Move
|
||||
if (Input.GetButtonDown("Jump"))
|
||||
{
|
||||
return _jumpState;
|
||||
return new JumpState(_player); // Create new JumpState object
|
||||
}
|
||||
if (Input.GetAxisRaw("Horizontal") != 0)
|
||||
if (Mathf.Abs(Input.GetAxisRaw("Horizontal")) > 0)
|
||||
{
|
||||
return _moveState;
|
||||
return new MoveState(_player); // Create new MoveState object
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -107,8 +104,6 @@ public class MoveState : IState
|
||||
public MoveState(PlayerMove player)
|
||||
{
|
||||
_player = player;
|
||||
_idleState = new IdleState(_player);
|
||||
_jumpState = new JumpState(_player);
|
||||
}
|
||||
|
||||
public void Enter()
|
||||
@@ -119,7 +114,7 @@ public class MoveState : IState
|
||||
public void Update()
|
||||
{
|
||||
// 상태별 로직
|
||||
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") < 0;
|
||||
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") > 0;
|
||||
}
|
||||
|
||||
public void FixedUpdate()
|
||||
@@ -147,11 +142,11 @@ public class MoveState : IState
|
||||
{
|
||||
if (Input.GetButtonDown("Jump"))
|
||||
{
|
||||
return _jumpState;
|
||||
return new JumpState(_player); // Create new JumpState object
|
||||
}
|
||||
if (Mathf.Abs(Input.GetAxisRaw("Horizontal")) < 0.1f) // 키 입력이 없을 때
|
||||
if (Mathf.Abs(Input.GetAxisRaw("Horizontal")) < 0.1f)
|
||||
{
|
||||
return _idleState;
|
||||
return new IdleState(_player); // Create new IdleState object
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -165,7 +160,6 @@ public class JumpState : IState
|
||||
public JumpState(PlayerMove player)
|
||||
{
|
||||
_player = player;
|
||||
_idleState = new IdleState(_player);
|
||||
}
|
||||
|
||||
public void Enter()
|
||||
@@ -179,7 +173,7 @@ public class JumpState : IState
|
||||
// 점프 중 스프라이트 방향 변경
|
||||
if (Input.GetButton("Horizontal"))
|
||||
{
|
||||
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") < 0;
|
||||
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,15 +189,13 @@ public class JumpState : IState
|
||||
|
||||
public IState CheckTransition()
|
||||
{
|
||||
// 바닥에 닿았는지 확인 -> IdleState로 전환
|
||||
if (_player.RigidBody.linearVelocity.y < 0)
|
||||
{
|
||||
Debug.DrawRay(_player.RigidBody.position, Vector3.down, Color.green);
|
||||
RaycastHit2D rayHit = Physics2D.Raycast(_player.RigidBody.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
|
||||
|
||||
if (rayHit.collider != null && rayHit.distance < 0.7f)
|
||||
{
|
||||
return _idleState;
|
||||
return new IdleState(_player); // Create new IdleState object
|
||||
}
|
||||
}
|
||||
return this;
|
||||
|
||||
Reference in New Issue
Block a user