게임개발 예제모음

InputSystem (RigidBody) 이동 예제 본문

유니티 메모장

InputSystem (RigidBody) 이동 예제

게임을만들어보자 2025. 6. 3. 15:41

2025.06.03 - [유니티 메모장] - 인풋시스템을 통한 오브젝트 이동 (ActionMap)

 

인풋시스템을 통한 오브젝트 이동 (ActionMap)

○ 오브젝트에 Player Input 컴포넌트 추가○ Action에서 액션맵편집 (확인) 필요○ 트랜스폼이 아닌 리지드바디 이용시에는 Update가 아닌 FixedUpdate에서 동작하도록 작성○ OnMove함수는 액션맵편집의

capsuleer.tistory.com

○ 위 포스트 내용은 오브젝트 이동을 트랜스폼 포지션을 통해서 구현했음

○ 유니티에서는 트랜스폼 이외에도 물리엔진을 통하여 오브젝트 위치를 이동할 수 있으며 이 포스팅은 물리엔진(RigidBody)를 통한 오브젝트 이동 예제를 정리함

 

○ 컨트롤러 입력으로 이동시킬 오브젝트에 Player Input 컴퍼넌트 추가

 

○ Project윈도우의 Asset등에서 인풋액션 추가

 

○ 대응키 매핑

 

추가한 인풋액션을 Player Input 컴포넌트에 어태치

 

○ 이후 스크립트에서 코드 작성 (이동을 담당할 스크립트를 작성 후 오브젝트에 추가 ex: PlayerController)

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    [SerializeField] float moveSpeed = 3f;    
    //이동속도 지정 (인스펙터에서 조절 가능하도록 직렬화)

    Vector2 moveVector;
    //인풋액션에서 입력받은 값을 벡터값으로 변환하기 위한 변수 선언
    Rigidbody2D myRigidbody2d;

    void Start()
    {
        myRigidbody2d = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
    	Vector2 forceVector = moveVector * moveSpeed * Time.fixedDeltaTime;
        //moveVector를 이용하여 실제 움직이는 속도 값을 계산
        myRigidbody2d.linearVelocity = forceVector;
        //최종적으로 오브젝트를 이동하게 만들어 준다
    }


    void OnFieldMove(InputValue value)
    // 상단의 InputAction Editor에서 설정한 액션 이름이 FieldMove이기 때문에 
    // 메소드 이름은 OnFieldMove가 되어야 함
    {
        moveVector = value.Get<Vector2>();
        //인풋액션에서 발생한 값을 moveVector에 대입
    }
}