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(초기화)
- Awake()
- 데이터를 초기화 목적의 Event Method
- Awake() Method가 활성화 상태면 현재 Scene이 실행된 직후 1회 호출
- GameObject 활성화 상태이면 Component와 상관 없이 호출함
- Start()
- 초기화 목적의 Event Method
- 첫 번째 프레임 Update가 실행되기 직전에 1회 호출
- Awake()가 먼저 실행되고 다음에 Start()가 실행
- GameObject, Component 모두 활성화되어야 호출
- OnEnable()
- Awake(), Start()는 Scene에서 1회 호출시 더 이상 호출되지 않음
- Component가 비활성화 되었다가 다시 활성화 될 때마다 1회 호출
- GameObject, Component 모두 활성화되어야 호출
2) Update
- Update()
- 코드를 지속적으로 실행하기 위한 용도
- 현재 Scene 실행 후 매 프레임마다 호출되는 Event Method
- GameObject, Component 모두 활성화되어야 호출
- LateUpdate()
- 현재 프레임에서 모든 GameObject의 Update()가 호출된 이후에 호출
- 서로 다른 Component가 순서에 따라 영향을 줄 경우 사용
- GameObject, Component 모두 활성화되어야 호출
- ex) 플레이어가 update(), 그에 따라오는 camera를 LateUpdate()로 설정 할 수 있다.
- FixedUpdate()
- 프레임의 영향을 받지 않고 정해진 횟수만큼 호출
- 기본값은 0.02,(초당 50회 호출)
- GameObject, Component 모두 활성화되어야 호출
3) Decommission(해체)
- OnDestroy()
- GameObject가 파괴될 때(GameObject를 삭제 할 때) 1회 호출
- Scene이 변경되거나 Game이 종료될 때 호출
- GameObject 활성화 상태이면 Component와 상관 없이 호출함
- OnApplicationQuit()
- Game이 종료될 때 1회 호출
- 플레이 모드를 중지할 때 호출
- Scene이 종료 될 때 모든 Object Memory를 삭제하기 때문에 OnDestroy()도 호출 됨
- GameObject 활성화 상태이면 Component와 상관 없이 호출함
- OnDisable()
- Component가 비활성 될 때 마다 1회 호출
- 활성화 상태의 Component가 비활성화 되어야 호출되기 때문에 활성/비활성이 필요
- GameObject, Component 모두 활성화되어야 호출
4) Gizmos(기즈모)
- OnDrawGizmos()
- Scene View에만 출력되는 선, 도형
- Game 제작 시 눈에 보이지 않는 것을 확인할 때 사용
- Gizmos Class
- OnDrawGizmos() Method 내부에서만 동작
- Color Property에서 설정한 대로 도형 색상 출력
- GameObject 활성화 상태이면 Component와 상관 없이 호출함
💡 호출되는 경우
Event Method | 모두 활성화 | GameObject 활성화 일때만 |
---|
Initialize | Start() OnEnable() | Awake() |
Update | Update() LateUpdate() FixedUpdate() | |
Decommittion | OnDisable() | OnDestroy() OnApplicationQuit() |
Gizmos | | OnDrawGizmos() |
3. 장애물이 없는 환경에서 오브젝트 이동
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 물리와 충돌 범위
- Rigidbody Component
- Collider Component
2) GameObject 충돌 처리
3) 충돌 Event Method
이것 저것 실습이 있어서 시간이 길어졌지만 따라가기엔 수월한 수업이였다.