반응형

1. 시험환경

    · 윈도우

    · 유니티(Unity) v6.2

 

2. 목적

    · 미니게임 프로젝트를 위한 첫번째 시간

    · 특정 공간(Ground + Wall)에서 Player가 이동하는 동작을 구현한다.

 

3. 적용

    ① 신규 프로젝트를 생성한다.

        - Template: Universal 3D

        - Project name: evadeGame

        - Location: C:\workspace-unity

 

    ② "3D Object" → "Plane"을 생성하여 player가 이동 가능한 면적을 만든다.

        - Object 이름: Ground

        - Position: (0, 0, 0)

        - Scale: (2, 1, 2)


 

    ③ "3D Object" → "Cube"를 생성하여 Ground을 둘러쌀 벽면을 만든다.

        - Object 이름: Wall_1

        - Position: (0, 0.5, 10)

        - Rotation: (0, 0, 0)

        - Scale: (20, 1, 0.2)

 

    ④ Wall_1 객체를 4개로 복사 후 각 Position을 조정하여 Ground의 테두리를 둘러싸도록 구성한다.

        - Object 이름: Wall_2
        - Position: (10, 0.5, 0)
        - Rotation: (0, 90, 0)

        - Scale: (20, 1, 0.2)
        - Object 이름: Wall_3
        - Position: (0, 0.5, -10)
        - Rotation: (0, 0, 0)

        - Scale: (20, 1, 0.2)
        - Object 이름: Wall_4
        - Position: (-10, 0.5, 0)
        - Rotation: (0, 0, 0)

        - Scale: (20, 1, 0.2)

 

    ⑤ Ground 장면이 한눈에 보이도록 Main Camera의 위치 및 시야를 조정한다.

        - Object 이름: Main Camera

        - Position: (0, 10, -15)

        - Rotation: (45, 0, 0)

        - Scale: (1, 1, 1)

 

    ⑥ "3D Object" → "Cube"를 생성하여 Player를 만든다.

        - Object 이름: Player

        - Position: (0, 0.5, 0)

        - Rotation: (0, 0, 0)

        - Scale: (1, 1, 1)



 

    ⑦ 사용자의 키보드 입력에 따라 객체가 이동하는 기능을 구현한다.

        - 경로: Assets/Scripts/

        - 파일명: PlayerController.cs

  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의 위치를 물리적으로 이동 (충돌 처리 가능)
      }
  }

 

    ⑧ 구현한 스크립트 파일 및 Rigidbody 컴포넌트를 Player 객체에 임포트 한다.

        - 임포트: RigidBody

        - 임포트: PlayerController.cs

 

    ⑨ "Edit"메뉴 → "Project Settings"팝업  → "Plyaer" 탭 → "Active Input Handling": Both 설정한다.

 

4. 결과

    · Play 버튼으로 실행 후 키보드 입력에 따라 Player 객체가 움직이는지 확인한다.

 

반응형

+ Recent posts