Unity 오브젝트 생명주기 익히기
1. 초기화
1) Awake()
게임 오브젝트 생성할때 최초로 1번 실행되는 함수
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
}
가장 먼저 실행되긴하네
2)Start()
업데이트 시작 직전, 최초 1번 실행
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
}
2. 물리연산
1) FixedUpdate()
물리연산을 업데이트 하는 함수
보통 1초에 50번 작동
컴퓨터 사양에 관계없이 고정된 실행 주기로 CPU를 많이 사용함
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
void FixedUpdate()
{
Debug.Log("이동");
}
}
실행해보면 고정된 주기로 이동이라는 메시지가 계속 출력되는
3. 게임로직
1) Update()
물리연산을 제외한 나머지 로직 중 주기적으로 변하는 로직
FixedUpdate와는 다르게 컴퓨터 사양에 따라 실행 주기가 달라질 수 있음
보통 60프레임으로 1초에 60번정도?
FixedUpdate보다 빠름
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
void FixedUpdate()
{
Debug.Log("이동");
}
void Update()
{
Debug.Log("몬스터 사냥");
}
}
콘솔창 좌측 상단 Collapse 누르면 우측에 출력 횟수로 바꿔주는데
보면 Update가 출력 횟수가 더 많다
하지만 환경에 따라 달라질 수 있긴함
2) LateUpdate()
모든 업데이트 함수들이 끝난 후 실행되는 함수
특정 로직들의 후처리
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
void FixedUpdate()
{
Debug.Log("이동");
}
void Update()
{
Debug.Log("몬스터 사냥");
}
void LateUpdate()
{
Debug.Log("경험치 획득");
}
}
보면 Update()와 동일한 숫자로 출력되고 있음
당연히 모든 업데이트가 끝나고 실행되는거니까 당연
4. 해체
1) OnDestroy()
게임 오브젝트가 삭제되기 직전에 무언가 실행하는 함수
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LifeCycle : MonoBehaviour
{
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
void FixedUpdate()
{
Debug.Log("이동");
}
void Update()
{
Debug.Log("몬스터 사냥");
}
void LateUpdate()
{
Debug.Log("경험치 획득");
}
void OnDestroy()
{
Debug.Log("플레이어 데이터를 해체하였습니다.");
}
}
스크립트 실행하고 오브젝트를 삭제해본다
삭제하면 메시지가 출력
5. 활성화
초기화 단계와 물리연산 단계 사이에 위치
1) OnEnable()
게임 오브젝트가 활성화 되었을 때마다 실행
Awake()와 Start() 사이에 실행
void Awake()
{
Debug.Log("플레이어 데이터가 준비되었습니다.");
}
void OnEnable()
{
Debug.Log("플레이어가 로그인했습니다.");
}
void Start()
{
Debug.Log("사냥 장비를 챙겼습니다.");
}
6. 비활성화
모든 오브젝트가 업데이트 된 후, 즉 게임로직 단계와 오브젝트 해체 단계 사이에 위치
1) OnDisable()
게임 오브젝트가 비활성화 되었을 때마다 실행
LateUpdate()와 OnDestroy() 사이에
void LateUpdate()
{
Debug.Log("경험치 획득");
}
void OnDisable()
{
Debug.Log("플레이어가 로그아웃하였습니다.");
}
void OnDestroy()
{
Debug.Log("플레이어 데이터를 해체하였습니다.");
}
물체에 연결된 스크립트를 해제하면 로그아웃 하였습니다 뜨고
로그 클리어하고 나서 다시 켜보면 로그인했습니다 후에 업데이트 실행되는
오브젝트를 삭제하면...
'프로그래밍 > Unity&C#' 카테고리의 다른 글
Unity를 위한 C# 기초 핵심 강의 보며 정리하기 (0) | 2024.11.10 |
---|---|
Unity 게임 빌드하기 (0) | 2024.06.22 |
Unity UI Text 표시 기초(TextMesh Pro) (0) | 2024.06.13 |
Unity&C# 수집형 오브젝트 만들기2 - 충돌을 감지하고 수집하기(태그 시스템) (0) | 2024.05.31 |
Unity 오브젝트를 Prefab으로 만들기 (0) | 2024.05.30 |