오버플로우로 유니티 먹통되는 코드 수정
This commit is contained in:
@@ -31,6 +31,15 @@ public class PlayerMove : MonoBehaviour
|
|||||||
RigidBody = GetComponent<Rigidbody2D>();
|
RigidBody = GetComponent<Rigidbody2D>();
|
||||||
SpriteRenderer = GetComponent<SpriteRenderer>();
|
SpriteRenderer = GetComponent<SpriteRenderer>();
|
||||||
Animator = GetComponent<Animator>();
|
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가 초기화된 후에 해시 값 할당
|
// 2. Animator가 초기화된 후에 해시 값 할당
|
||||||
_isJumping = Animator.StringToHash("isJumping");
|
_isJumping = Animator.StringToHash("isJumping");
|
||||||
@@ -68,4 +77,4 @@ public class PlayerMove : MonoBehaviour
|
|||||||
{
|
{
|
||||||
// OffDamaged 로직은 DamagedState의 Exit()로 이동
|
// OffDamaged 로직은 DamagedState의 Exit()로 이동
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,8 +59,6 @@ public class IdleState : IState
|
|||||||
public IdleState(PlayerMove player)
|
public IdleState(PlayerMove player)
|
||||||
{
|
{
|
||||||
_player = player;
|
_player = player;
|
||||||
_moveState = new MoveState(_player);
|
|
||||||
_jumpState = new JumpState(_player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Enter()
|
public void Enter()
|
||||||
@@ -85,14 +83,13 @@ public class IdleState : IState
|
|||||||
|
|
||||||
public IState CheckTransition()
|
public IState CheckTransition()
|
||||||
{
|
{
|
||||||
// 우선 순위: Jump -> Move
|
|
||||||
if (Input.GetButtonDown("Jump"))
|
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;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -107,8 +104,6 @@ public class MoveState : IState
|
|||||||
public MoveState(PlayerMove player)
|
public MoveState(PlayerMove player)
|
||||||
{
|
{
|
||||||
_player = player;
|
_player = player;
|
||||||
_idleState = new IdleState(_player);
|
|
||||||
_jumpState = new JumpState(_player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Enter()
|
public void Enter()
|
||||||
@@ -119,7 +114,7 @@ public class MoveState : IState
|
|||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
// 상태별 로직
|
// 상태별 로직
|
||||||
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") < 0;
|
_player.SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void FixedUpdate()
|
public void FixedUpdate()
|
||||||
@@ -147,11 +142,11 @@ public class MoveState : IState
|
|||||||
{
|
{
|
||||||
if (Input.GetButtonDown("Jump"))
|
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;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -165,7 +160,6 @@ public class JumpState : IState
|
|||||||
public JumpState(PlayerMove player)
|
public JumpState(PlayerMove player)
|
||||||
{
|
{
|
||||||
_player = player;
|
_player = player;
|
||||||
_idleState = new IdleState(_player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Enter()
|
public void Enter()
|
||||||
@@ -179,7 +173,7 @@ public class JumpState : IState
|
|||||||
// 점프 중 스프라이트 방향 변경
|
// 점프 중 스프라이트 방향 변경
|
||||||
if (Input.GetButton("Horizontal"))
|
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()
|
public IState CheckTransition()
|
||||||
{
|
{
|
||||||
// 바닥에 닿았는지 확인 -> IdleState로 전환
|
|
||||||
if (_player.RigidBody.linearVelocity.y < 0)
|
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"));
|
RaycastHit2D rayHit = Physics2D.Raycast(_player.RigidBody.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
|
||||||
|
|
||||||
if (rayHit.collider != null && rayHit.distance < 0.7f)
|
if (rayHit.collider != null && rayHit.distance < 0.7f)
|
||||||
{
|
{
|
||||||
return _idleState;
|
return new IdleState(_player); // Create new IdleState object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
Reference in New Issue
Block a user