이벤트 함수
(1) 이벤트 함수 개요
- 유니티에는 개발자의 편의를 위해 미리 정의해둔 이벤트 함수가 존재
- 사전에 정의된 순서, 특정 조건을 만족할 때 자동으로 호출됨
- 유니티의 메시지와 브로드캐스팅 시스템
- 독립적인 형태의 컴포넌트 내부에 있는 함수를 실행시키기 위해 사용하는 방법
📌 예제) 유니티의 메시지 : Start() 함수를 실행해
(2) 이벤트 함수 종류
1. 초기화를 위한 이벤트 함수: Awake(), Start(), OnEnable()
2. 업데이트를 위한 이벤트 함수: Update(), LateUpdate(), FixedUpdate()
3. 오브젝트 파괴를 위한 이벤트 함수: OnDestroy()
4. 종료를 위한 이벤트 함수: OnApplicationQuit(), OnDisable()
▶ 본 학습에서만 다루는 함수로 이 외에 더 다양한 함수가 있음
(3) 스크립트(클래스) 구성
초기화
📌 Awake() 함수
- 데이터를 초기화를 목적으로 만들어진 이벤트 함수
- 현재 씬에서 게임 오브젝트가 활성화 되어 있을 때 1회 호출
- 컴포넌트가 비활성화 상태여도 게임 오브젝트가 활성화 되어 있으면 호출된다
📌 Start() 함수
- 데이터 초기화를 목적으로 만들어진 이벤트 함수
- 현재 씬에서 게임 오브젝트와 컴포넌트가 모두 활성화되어 있을 때 1회 호출
- 첫번째 업데이트 함수가 실행되기 직전에 호출
- 초기화 함수 호출 순서: Awake() → OnEnable() → Start()
📌 OnEnable() 함수
- 컴포넌트가 비활성화 되었다가 활성화 될 때 마다 1회 호출
✅ 실습 진행
1. 새로운 C# 스크립트를 생성하고 빈 오브젝트에 넣어준다.
2. 비주얼 스튜디오를 열어 Awake 함수 실행을 위한 코드를 작성한다.
3. 함수 실행 후 콘솔 뷰에 함수에 작성한 내용이 출력되는 것을 확인할 수 있다.
4. Start() 함수 실행을 위한 코드 추가
5. 실행 결과 게임 오브젝트와 컴포넌트가 모두 활성화 되어있을 경우 Awake와 Start 함수가 모두 실행되지만, 컴포넌트가 비활성회 되어있을 경우 Awake 함수만 실행되는 것을 볼 수 있다.
6. OnEnable() 함수 실행을 위한 코드 추가
7. OnEnable 함수 실행 결과, 게임 오브젝트 혹은 컴포넌트를 여러번 재실행하면 Awake나 Start 함수는 다시 실행되지 않지만, OnEnable 함수는 게임 오브젝트 혹은 컴포넌트가 활성화 될 때마다 실행되어 해당 문구가 출력되는 것을 볼 수 있다.
업데이트
📌 Update() 함수
- 현재 씬이 실행된 후 컴포넌트가 활성화되어 있을 때 매 프레임마다 호출
- FPS 60이라 하면 Update() 함수가 1초에 60번 호출된다는 뜻
📌 LateUpdate() 함수
- 현재 씬에 존재하는 모든 게임 오브젝트의 Update() 함수가 1회 실행된 후 실행된다
- 업데이트 함수 호출 순서 : Update() → LateUpdate()
- Ex) 플레이어 캐릭터, 카메라와 같이 서로 다른 오브젝트가 존재할 때 플레이어 캐릭터를 쫒아다니는 카메라를 구현한다면?
▶ 플레이어 캐릭터가 Update()를 이용해 움직이고 난 후 카메라는 LateUpdate()에서 플레이어의 위치를 바탕으로 이동한다.
📌 FixedUpdate() 함수
- 프레임의 영향을 받지 않고 일정한 간격으로 호출
- Edit - Project Settings - Time 옵션의 Fixed Timestep 변수로 조정 가능
- 기본 값 0.02로 0.02초에 한번 호출된다는 뜻, 1초에 50번
✅ 실습 진행
1. 실행을 위한 Update() 함수 코드 추가
2. 실행 결과, Update() 함수의 내용만 계속해서 증가하는 것을 볼 수 있다.
3. LateUpdate() 함수 실행을 위한 코드 작성
4. 실행 결과, Update → LateUpdate 순으로 실행되며 실행 횟수는 동일한 것을 확인할 수 있다.
5. FixedUpdate 함수 실행을 위한 코드 추가
6. 실행 결과, Update와 LateUpdate 함수는 계속 증가하고 있는 반면, FixedUpdate는 정해진 양 즉, 1초에 최대 50번씩만 증가하는 것을 확인할 수 있다.
오브젝트 파괴
📌 OnDestroy() 함수
- 게임 오브젝트가 파괴될 때 1회 호출
- 씬이 변경되거나 게임이 종료될 때도 오브젝트가 파괴되기 때문에 호출된다
✅ 실습 진행
1. 실습을 위한 OnDestry() 함수 코드 추가
2. 게임 오브젝트를 실행하다가 멈추거나 실행도중 게임 오브젝트를 제거하면 OnDestroy() 함수가 실행되는 것을 볼 수 있다.
종료
📌 OnApplicationQuit() 함수
- 게임이 종료될 때 1회 호출
- 유니티 에디터에서는 플레이 모드를 중지할 때 호출된다
📌 OnDisable() 함수
- 컴포넌트가 활성화 되었다가 비활성화 될 때 마다 1회 호출 (OnEnable과 반대)
✅ 실습 진행
1. OnApplicationQuit() 함수 실행을 위한 코드 추가
2. 실행 결과, 오브젝트 실행 이후 종료되니 OnApplicationQuit 함수가 실행되고 게임 오브젝트가 종료되었기 때문에 OnDestroy() 함수도 실행되는 것을 볼 수 있었다.
3. OnDisable 함수 코드 추가
4. 실행결과, 게임 오브젝트가 비활성화 될 때, OnDisable() 함수가 실행되는 것을 볼 수 있었다.
출처 : 따라하면서 배우는 고박사의 유니티 기초(https://inf.run/sgcy)
'Study > Unity' 카테고리의 다른 글
[Unity 2D Basic] 게임 오브젝트 물리와 충돌 (0) | 2024.04.10 |
---|---|
[Unity 2D Basic] 게임 오브젝트 이동 (0) | 2024.04.10 |
[Unity Introduction] 스크립트 개요, 콘솔 뷰에 데이터 출력 (0) | 2024.04.03 |
[Unity Introduction] 게임 오브젝트, 컴포넌트 (0) | 2024.04.03 |
[Unity Introduction] 유니터 에디터 인터페이스 (1) | 2024.04.03 |