움직임 제어(속도, 이동 방향)
using UnityEngine;
//player object에 현재 script 추가 시 RIgidbody2D 컴포넌트가 함께 추가됨
[RequireComponent(typeof(Rigidbody2D))]
public class MovementRidgidbody2D : MonoBehaviour
{
[Header("Move Horizontal")]
[SerializeField]
private float moveSpeed = 8; // 이동 속도
private Rigidbody2D rigid2D; // 속력 제어를 위한 Rigidbody2D
private void Awake()
{
rigid2D = GetComponent<Rigidbody2D>();
}
public void MoveTo(float x)
{
// x 이동 방향 설정 (외부 클래스에서 호출)
rigid2D.velocity = new Vector2(x * moveSpeed, rigid2D.velocity.y);
}
}
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private MovementRidgidbody2D movement2D;
private void Awake()
{
movement2D = GetComponent<MovementRidgidbody2D>();
}
// Update is called once per frame
void Update()
{
UpdateMove();
}
private void UpdateMove()
{
// left, a = -1 / none = 0 / right, d = +1
float x = Input.GetAxisRaw("Horizontal");
// 좌우 이동
movement2D.MoveTo(x);
}
}
두 스크립트를 Player object에 적용
충돌 처리를 위해 Player object에 BoxCollider2D 컴포넌트 추가
어이없던 점: player object에만 BoxCollider2D 컴포넌트를 추가해줬더니 object간 충돌 처리가 되지 않고 서로를 통과해버려 player object가 아래로 떨어져 버렸다.
-해결: ground object에도 BoxCollider2D 컴포넌트를 추가해주었다.
Constraints - Freeze Rotation z = true // 활성화