[Unity 마스터 클래스] 장애물이 없는 환경에서 오브젝트 이동

시에나 Sienna·2024년 10월 26일
0

1. 장애물이 없는 환경에서 오브젝트 이동

1) Transform component를 이용한 Object 이동

  • Transform Component : GameObject의 위치를 제어하는 Component

2) GetKey() Method, GetAxisRaw() Method를 이용한 이동 방향 제어

  • transform.position = .. 라는 코드에서
    • transform은 script를 component로 가지고 있는 GameObject의 Transform Component를 나타낸다.
    • .position은 Transform Component의 Position 변수를 나타낸다.

즉, Script에서 자신이 소속된 GameObject의 Transform Component에 접근 할 때는 transform으로 접근 가능하다

위치 설정 : transform.posiont = 수식
위치 정보 사용 : Debug.Log(transform.position);

  • Vector3 구조체 : Game의 2D/3D 공간에서 이동, 회전, 크기를 표현하기 위해 죄표 체계를 나타내는 단위
    • 2차원 : Vector2, 3차원 Vector3, 정수 Vector2Int, 실수 Vector3Int로 구조체가 정의 되어 있음
  • 구조체 내부에는 연산을 위한 property, Method가 정의
    • Time.deltaTime : 업데이터 사이의 시간
    • Input Class : Unity에서 제공하는 입력과 관련된 모든 Method가 정의되어 있는 Class
    • GetKey Method : 키보드 키 입력 여부 확인 Method
      • KeyCode 열거형에 정의되어 있는 상수 또는 문자열(string)을 매개변수로 사용
      • 반환되는 값은 조건만족(True), 조건 불만족(False)
  • 상황에 따른 키 입력 여부
    - GetKeyDown() : 매개변수와 동일한 키를 누르는 순간 1회 True 반환
    - bool result = Input.GetKeyDown(KeyCode key);
    - bool result = Input.GetKeyDown(string key);
    - GetKey() : 매개변수와 동일한 키를 누르고 있는 동안 매 Frame True 반환
    - bool result = Input.GetKey(KeyCode key);
    - bool result = Input.GetKey(string key);
    - GetKeyUp() : 매개변수와 동일한 키를 떼는 순간 1회 True 반환
    - bool result = Input.GetKeyUp(KeyCode key);
    - bool result = Input.GetKeyUp(string key);

    Tip)
    [+=] 사용 시 대각선 방향으로도 이동 가능(누른 키 값이 중첩되기 때문)
    [=] 사용 시 대각선 방향으로 이동 불가

  • InputManager : 단축키 시스템
    • 장점 : 1~4개의 키를 한 세트로 묶어 검사 가능
    • 키보드, 마우스, 외부 컨트롤러 모두에 설정 가능
    • 동일한 이름의 단축키 생성 가능
    • 조작 인터페이스가 바뀌더라도 코드를 수정하지 않고 적용 가능
  • 단축키 추가 시 Axes의 Size 변경하고, 추가된 단축키의 이름과 파라미터 수정함
  • GetAxis Method :
    • Input Manager에서 설정한 단축키의 키 입력 여부 확인
    • 동시에 여러 키의 정보를 확인 가능
    • 매개변수 : InputManager에 등록되어 있는 단축키명을 String(문자열)로 사용
      • 긍정키 : 0 < n ≤ 1
      • 부정키 : -1 ≤ n < 0
      • 아무 키도 누르지 않을 경우 0값 반환
      • 0에서 1로 서서히 증가
      • 0과 1사이에 있는 소수점 데이터 출력
  • GetAxisRaw() Method : -1, 0, 1의 세 정수만 출력
  • Input.GetAxisRaw(”Horizontal”) 단축키 : [a], [d], [←], [→] 방향키 저장
    • [a], [←] : -1
    • [d], [→] : 1
    • 아무 키도 누르지 않을 경우 : 0 값 반환
  • Input.GetAxisRaw(”vertical”) : [w], [s], [↑], [↓] 방향키 저장

2. 장애물이 있는 환경에서 오브젝트 이동

1) GameObject 물리와 충돌 범위

  1. Rigidbody Component
    a. Mass : Object 질량
    b. Drag : 위치 움직임에 대한 마찰력
    c. Angular Drag : 회전 움직임에 대한 마찰력
    d. Use Gravity : 중력 사용 여부(True: 중력 적용)
    e. Is Kinematic : 물리 적용 On/Off(true: 물리 시스템으로 이동/회전 불가능)
    f. Constraints : 체크된 축은 외부로부터 받은 물리력에 의해 이동, 회전 하지 않음

  2. Collider Component

    • 3차원 공간에서 Object의 충돌 범위 표현
    • Box Collider : 육면체 형태의 충돌 범위 설정
      • 충돌 범위는 화면에 출력되는 이미지보다 크거나 작게 설정 가능
    • Sphere Collider : 구 형태의 충돌 범위를 설정 할 때 사용
      • 구 충돌이 모든 충돌 중 연산 속도가 가장 빠름
    • Capsule Collider : 캡슐 형태의 충돌 범위를 설정할 때 사용
    • Mesh Collider : 3차원 Object의 Mesh Data와 동일한 형태의 충돌 범위 설정
      • 세밀한 충돌 가능
      • 많은 Object를 필요로 할 때는 지양
    • Wheel Collider : 자동차 바퀴 충돌 범위 설정
    • Terrain Collider : 3차원 높이 맵(Terrain)의 충돌 범위 설정
      • [GameObject] - [3D Object] - [Terrain]으로 생성
      • Terrain Data : Project View에 ASsset으로 생성되는 Terrain 정보

2) GameObject 충돌 처리

서로 다른 차원의 Component들은 반응하지 않음으로 통일해서 사용해야 함

  • 2D Game 제작용 : Rigidbody2D - Collider2D
  • 3D Game 제작용 : Rigidbody - Collider
  1. Transform Component를 이용한 Object 이동

    • Rigidbody Component : 충돌로 인해 Object의 x, z 축이 회전하지 않도록 설정
    • MovementTransform Script
      • 장애물과의 충돌에 대한 처리 미실시
      • 사용자가 입력한 방향키 방향으로만 이동
    • Rigidbody, Collider Component : 장애물과의 충돌 시 밀어내는 등의 처리 역할
    • 물리, 중력, 장에물에 대한 처리
      • (transform.position += ..) 코드 이전에 처리
      • 결과에 따라 다양한 행동 실행
    • 실제로 코드를 쳐서 하기에는 많은 노력과 시간이 필요하므로 일반적으로는 Rigidbocy, CharacterCollider Component사용하거나 다른 개발자가 만든 이동 Asset 사용함
  2. Rigidbody Component를 이용한 Object 이동

    • 별도의 이동 Method 호출
    • Object의 이동 여부 파악 → 이동 불가하면 이동 코드 미실행
    • GetComponent<Component명>()

3) 충돌 Event Method

  1. 물리적인 충돌과 충돌 Event Method 호출
    • OnCollision Event Method : 두 Object 간의 물리적인 충돌 상황에 따라 특정 Method를 호출할 때 사용
  2. 물리적인 충돌 없이 충돌 Event Method 호출
    • OnTrigger Event Method : 두 Object 간의 비물리적인 충돌 시 특정 Method만 호출할 때 사용

이것 저것 실습이 있어서 시간이 길어졌지만 따라가기엔 수월한 수업이였다. 실습한 결과물을 이미지 또는 동영상으로 업로드 추가 해봐야 겠다.

0개의 댓글