내일배움캠프/Unity
Unity 3D 사다리 구현
danpat77
2025. 3. 10. 20:42
사다리 시스템 작동 방식
- 플레이어가 사다리 근처로 가면 OnTriggerEnter()가 실행되어 사다리 사용 상태로 변경
- 플레이어가 사다리를 사용중에는 오르고 내려갈 수 있음
- 플레이어가 사다리에서 벗어나면 OnTriggerExit()가 실행되어 다시 중력 활성화
코드 구현 - 사다리 감지 및 상태 변경(Landder.cs)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Landder : MonoBehaviour
{
bool useLandder = false; // 사다리 사용 상태
private void Update()
{
if (useLandder)
{
CharacterManager.Instance.Player.controller.UseLandder();
}
}
private void OnTriggerEnter(Collider other)
{
// 사다리 사용 상태 가능으로 변경
useLandder = true;
CharacterManager.Instance.Player.controller.isUseObject = true;
}
private void OnTriggerExit(Collider other)
{
// 사다리 사용 상태 불가능으로 변경
useLandder = false;
CharacterManager.Instance.Player.controller.isUseObject = false;
CharacterManager.Instance.Player.controller.UseGrabity(); // 중력 활성화
}
}
코드 구현 - 플레이어 사다리 이동 기능 (PlayerController.cs)
// 이동 로직
public void OnMoveInput(InputAction.CallbackContext context)
{
if (context.phase == InputActionPhase.Performed) // 키보드 입력을 받고 움직였을 때
{
curMovementInput = context.ReadValue<Vector2>();
}
else if (context.phase == InputActionPhase.Canceled) // 키보드 입력이 끝났을 때
{
curMovementInput = Vector2.zero;
}
}
// 사다리 로직
public void UseLandder()
{
_rigidbody.useGravity = false; // 중력 제거
if (curMovementInput.y > 0) // 위로 이동
{
_rigidbody.velocity = new Vector3(0, moveSpeed * 0.5f, 0);
}
else if (curMovementInput.y < 0) // 아래로 이동
{
_rigidbody.velocity = new Vector3(0, -moveSpeed * 0.5f, 0);
}
else // 멈춰있을 때
{
_rigidbody.velocity = Vector3.zero;
}
}
실행 결과
플레이어가 사다리에 붙으면 사다리를 중력을 false로 변경하여 사다리를 오르고 내릴 수 있다.
또한 사다리에 벗어나면 중력이 true로 변경되어 다시 원래대로 이동이 가능하다.