[Unity 마스터 클래스] 오브젝트 이동방법

시에나 Sienna·2024년 8월 30일
0

1. C# 프로그래밍

1) C# Script

  • GameObject의 각종 명령 제어
  • Game 내 Object들을 생성/삭제 및 관리
  • Game 전체 또는 일부 관리
  • Game의 모든 요소, 기능을 Script로 작성
  • 우리가 실제 만든 Component는 ‘이름 + (Script)’로 표기됨
  • project > C# script 선택하여 생성
  • 생성된 Script 이름을 더블클릭하면 vs code로 이동하여 작성 할 수 있다.

💡 Tip

  • Script 내부에서 다른 Component에 접근하여 원하는 정보를 얻거나 변경 가능

  • 파일 명 수정 및 변경
    • 파일 생성 직후 파일 이름 수정 시 ⇒ Class 이름 자동 변경(파일 이름과 동일)
    • 파일 생성 이후 파일 이름 변경 시 ⇒ Class 이름을 별도 수정해야 함
  • Namespace(이름 공간) : 특정한 규칙으로 묶여 있는 Class, 구조체를 담고 있음

2) Debug.Log() Method

  • 괄호 안에 입력하는 문자열 또는 변수 값을 Console View에 출력하는 Method
  • 여기서 Method란 Scene에 배치되는 하나의 객체를 지정하는 단위
  • Hierarchy View > GameObject 내 Component 적용 방법
    • Hierarchy View에서 빈 GameObject를 생성하여 Script를 드래그
    • 또는 Component를 열어 이동시키거나 add Component로 추가하기
  • Script 파일 이름과 Class 이름이 같아야 함
  • 부모 class로 “MonoBehaviour”를 상속 받아야 함

2. Event Method

  • Unity세서 개발자 편의를 위해 미리 정의해둔 Event Method
  • 사전에 정의된 순서와 특정 조건을 만족할 때 자동 호출

이벤트 함수의 실행 순서 - Unity 매뉴얼

1) Initialize(초기화)

  1. Awake()
    • 데이터를 초기화 목적의 Event Method
    • Awake() Method가 활성화 상태면 현재 Scene이 실행된 직후 1회 호출
    • GameObject 활성화 상태이면 Component와 상관 없이 호출함
  2. Start()
    • 초기화 목적의 Event Method
    • 첫 번째 프레임 Update가 실행되기 직전에 1회 호출
    • Awake()가 먼저 실행되고 다음에 Start()가 실행
    • GameObject, Component 모두 활성화되어야 호출
  3. OnEnable()
    • Awake(), Start()는 Scene에서 1회 호출시 더 이상 호출되지 않음
    • Component가 비활성화 되었다가 다시 활성화 될 때마다 1회 호출
    • GameObject, Component 모두 활성화되어야 호출

2) Update

  1. Update()
    • 코드를 지속적으로 실행하기 위한 용도
    • 현재 Scene 실행 후 매 프레임마다 호출되는 Event Method
    • GameObject, Component 모두 활성화되어야 호출
  2. LateUpdate()
    • 현재 프레임에서 모든 GameObject의 Update()가 호출된 이후에 호출
    • 서로 다른 Component가 순서에 따라 영향을 줄 경우 사용
    • GameObject, Component 모두 활성화되어야 호출
    • ex) 플레이어가 update(), 그에 따라오는 camera를 LateUpdate()로 설정 할 수 있다.
  3. FixedUpdate()
    • 프레임의 영향을 받지 않고 정해진 횟수만큼 호출
    • 기본값은 0.02,(초당 50회 호출)
    • GameObject, Component 모두 활성화되어야 호출

3) Decommission(해체)

  1. OnDestroy()
    • GameObject가 파괴될 때(GameObject를 삭제 할 때) 1회 호출
    • Scene이 변경되거나 Game이 종료될 때 호출
    • GameObject 활성화 상태이면 Component와 상관 없이 호출함
  2. OnApplicationQuit()
    • Game이 종료될 때 1회 호출
    • 플레이 모드를 중지할 때 호출
    • Scene이 종료 될 때 모든 Object Memory를 삭제하기 때문에 OnDestroy()도 호출 됨
    • GameObject 활성화 상태이면 Component와 상관 없이 호출함
  1. OnDisable()
    • Component가 비활성 될 때 마다 1회 호출
    • 활성화 상태의 Component가 비활성화 되어야 호출되기 때문에 활성/비활성이 필요
    • GameObject, Component 모두 활성화되어야 호출

4) Gizmos(기즈모)

  1. OnDrawGizmos()
    • Scene View에만 출력되는 선, 도형
    • Game 제작 시 눈에 보이지 않는 것을 확인할 때 사용
    • Gizmos Class
      • OnDrawGizmos() Method 내부에서만 동작
      • Color Property에서 설정한 대로 도형 색상 출력
    • GameObject 활성화 상태이면 Component와 상관 없이 호출함

💡 호출되는 경우

Event Method모두 활성화GameObject 활성화 일때만
InitializeStart()
OnEnable()
Awake()
UpdateUpdate()
LateUpdate()
FixedUpdate()
DecommittionOnDisable()OnDestroy()
OnApplicationQuit()
GizmosOnDrawGizmos()

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

1) Transform component를 이용한 Object 이동

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);

  • 2D/3D 공간에서 이동, 회전, 크기를 표현하지 위해 Vector 구조체를 제공
  • 구조체 내부에는 연산을 위한 property, Method가 정의

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

1) GameObject 물리와 충돌 범위

  1. Rigidbody Component
  2. Collider Component

2) GameObject 충돌 처리

3) 충돌 Event Method

이것 저것 실습이 있어서 시간이 길어졌지만 따라가기엔 수월한 수업이였다.

0개의 댓글