반응형

1. 시험환경

    · 윈도우

    · Unity 6.2

 

2. 목적

    · 사용자의 키보드 입력에 따라 객체(Object)가 이동하도록 구성한다.

    · 만약, 객체가 이동하다가 Ground의 경계 지역을 벗어나면 중력의 영향을 받아 떨어지도록 구성한다.

 

3. 적용

    ① 신규 프로젝트("Create project" )를 생성한다.

        - Template: Universal 3D
        - Project name: chap04_KeyInputMove
        - Location: C:\workspace-unity

 

    ② "Hierachy 창" → "마우스 우클릭 팝업 메뉴" "3D Object" "Plane"을 생성하여 바닥을 만든다.

        - 이름: Ground

        - Position: (0, 0, 0)

 

    ③ "Hierachy 창" → "마우스 우클릭 팝업 메뉴" "3D Object"   "Cube"를 생성하여 Player를 만든다.

        - 이름: Player

        - Position: (0, 0.5, 0)

        - Rigidbody 컴포넌트 추가: Use Gravity(체크)

 

    ④ Main Camera 시점을 조정하여 Ground 및 Player 객체가 한눈에 보이도록 설정한다.

        - Position: (0, 5, -7)

        - Rotation: (30, 0, 0)

 

    ⑤ "Project 창" → "Assets/Scripts 폴더 생성" → "cs 파일 생성" 후 Player 객체에 임포트(Drag&Drop) 한다.

        - 경로: Assets/Scripts/

        - 파일명: PlayerController.cs

 

    ⑥ 사용자의 키보드 입력에 따라 Player 객체가 이동하는 코드를 작성한다.

  using UnityEngine;  
  // Unity의 기본 엔진 기능을 사용하기 위해 필요한 네임스페이스 (필수)

  public class PlayerController : MonoBehaviour  
  // PlayerController라는 이름의 스크립트를 정의 (MonoBehaviour는 Unity의 기본 컴포넌트 클래스)
  {
      public float moveSpeed = 5f;  
      // public 변수: 인스펙터(Inspector) 창에서 이동 속도를 조정할 수 있음
      // 5f는 기본 이동 속도 (초당 5유닛)

      private Rigidbody rb;  
      // Rigidbody 컴포넌트를 저장할 변수 (물리 엔진을 통해 움직임 제어)

      // Unity 생명주기 함수 중 하나: 게임이 시작될 때 1번 호출됨
      void Start()  
      {
          rb = GetComponent<Rigidbody>();  
          // 현재 게임 오브젝트에 붙은 Rigidbody 컴포넌트를 가져와 변수 rb에 저장
          // Rigidbody가 없으면 MovePosition을 사용할 수 없음
      }

      // FixedUpdate는 Unity의 물리 연산 프레임마다 호출되는 함수 (물리 기반 이동에 적합)
      void FixedUpdate()  
      {
          float h = Input.GetAxis("Horizontal");  
          // "Horizontal" 입력 값 가져오기: 왼(-1) ↔ 오른(+1)
          // 기본적으로 키보드의 A, D 또는 ←, → 키에 대응

          float v = Input.GetAxis("Vertical");  
          // "Vertical" 입력 값 가져오기: 아래(-1) ↔ 위(+1)
          // 기본적으로 키보드의 S, W 또는 ↓, ↑ 키에 대응

          Vector3 dir = new Vector3(h, 0, v);  
          // 입력 값을 바탕으로 3D 공간의 이동 방향 벡터 생성
          // y축은 0으로 고정 (즉, 평면상에서만 이동)

          rb.MovePosition(transform.position + dir * moveSpeed * Time.fixedDeltaTime);
          // transform.position: 현재 오브젝트의 위치
          // dir * moveSpeed: 이동 방향에 속도를 곱해 이동 벡터 계산
          // Time.fixedDeltaTime: 프레임별 시간 간격 (일정한 속도로 이동)
          // rb.MovePosition(): Rigidbody의 위치를 물리적으로 이동 (충돌 처리 가능)
      }
  }

 

    ⑦ Unity 2021 이상에서는 Input System 기본 설정을 하지 않으면 동작하지 않을 수 있다.

        - "Edit 메뉴" → "Project Settings..." → "Player 탭" → "Other Settings" → "Input System Package": Both

 

4. 결과

    · Player 실행하면 사용자의 키보드 입력 방향(전/후/좌/우)에 따라 Player 객체가 이동하는 것을 확인할 수 있다.

 

 

반응형

+ Recent posts