Unity 스 크 립 트 의 생명주기 와 실행 순 서 를 간단히 말 합 니 다.
Unity 스 크 립 트 에서 흔히 볼 수 있 는 필연 적 인 사건 은 다음 과 같 습 니 다.
명칭.
촉발 시기
용도.
Awake
스 크 립 트 인 스 턴 스 생 성 시 호출
게임 대상 의 초기 화 에 사용 합 니 다.Awake 의 모든 스 크 립 트 보다 빠 른 Start 함수 실행 에 주의 하 십시오.
OnEnable
대상 이 사용 가능 하거나 활성화 상태 로 변 했 을 때 호출 됨
용도.
Start
Update 함수 첫 번 째 실행 전 호출
게임 대상 초기 화
Update
프레임 당 한 번 호출
게임 필드 와 상태 업데이트 에 사용
FixedUpdate
고정 물리 시간 간격 으로 한 번 씩 호출 합 니 다.
물리 상태 업데이트 에 사용
LateUpdate
프레임 당 한 번 호출(update 후 호출)
게임 장면 과 상 태 를 업데이트 하 는 데 사용 되 며 카메라 와 관련 된 업 데 이 트 는 보통 여기에 놓 습 니 다.
OnGUI
OnGUI 이벤트 렌 더 링 및 처리
용도.
OnDisable
현재 대상 이 사용 할 수 없 거나 비활성 상태 일 때 호출 됨
용도.
OnDestroy
현재 대상 이 폐기 되 었 을 때 호출
용도.
다음은 코드 로 이 필연 적 인 사건 들 의 호출 시 기 를 살 펴 보 겠 습 니 다.
C\#스 크 립 트 를 새로 만 들 고 다음 코드 를 추가 한 다음 임의의 게임 대상 에 걸 어 놓 습 니 다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestTest : MonoBehaviour
{
private void Awake()
{
Debug.Log("Awake");
}
private void OnEnable()
{
Debug.Log("OnEnable");
}
// Start is called before the first frame update
void Start()
{
Debug.Log("Start");
}
// Update is called once per frame
void Update()
{
Debug.Log("Update");
}
private void FixedUpdate()
{
Debug.Log("FixedUpdate");
}
private void LateUpdate()
{
Debug.Log("LateUpdate");
}
private void OnGUI()
{
Debug.Log("OnGUI");
}
private void OnDisable()
{
Debug.Log("OnDisable");
}
private void OnDestroy()
{
Debug.Log("OnDestroy");
}
}
인쇄 결 과 는 다음 과 같다.Awake,Start 함 수 는 게임 대상 이 생 성 될 때 한 번 호출 되 는 것 을 발견 할 수 있 습 니 다.
게임 과정 에서 스 크 립 트 의 보 이 는 상 태 를 조정 할 때 OnEnable,OnDisable 함 수 를 각각 호출 하고 Awake 와 Start 는 다시 호출 하지 않 습 니 다.즉,스 크 립 트 가 마 운 트 되면 Awake 와 Start 는 한 번 만 실 행 됩 니 다.
한편,Update,Fixed Update,LateUpdate,OnGUI 함 수 는 게임 과정 에서 여러 번 호출 됩 니 다(로그 창 오른쪽 에 있 는 숫자 는 로그 정 보 를 인쇄 하 는 횟수 를 표시 합 니 다).
마지막 으로 게임 대상 이 소 멸 될 때 OnDisable,OnDestory 함 수 를 순서대로 호출 합 니 다.
2.MonoBehavior 생명주기 도
다음은 생명주기 도 를 한 장 더 놓 겠 습 니 다.
3.스 크 립 트 실행 순서
게임 개발 에 있어 서 많은 스 크 립 트 를 사용 할 수 밖 에 없습니다.그러면 서로 다른 스 크 립 트 간 에 호출 된 우선 순 위 를 어떻게 확정 합 니까?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test1 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log("start 1");
}
private void Awake()
{
Debug.Log("awake 1");
}
// Update is called once per frame
void Update()
{
Debug.Log("update 1");
}
}
위의 코드 를 Test 1,Test 2,Test 3 스 크 립 트 에 순서대로 추가 하고 다른 게임 대상 에 마 운 트 합 니 다.마 운 트 순 서 는 먼저 Test 3 를 마 운 트 한 다음 Test 2 를 마 운 트 하고 마지막 으로 Test 1 을 마 운 트 하 는 것 입 니 다.
인쇄 결 과 는 아래 그림 과 같다.
인쇄 결 과 는 먼저 Test 1 을 인쇄 한 다음 Test 2 를 인쇄 하고 마지막 으로 Test 3 를 인쇄 합 니 다.
사실 스 크 립 트 의 실행 순 서 는 게임 대상 에 마 운 트 된 우선 순위 와 관계 가 있 습 니 다.가장 먼저 마 운 트 된 마지막 실행,마지막 으로 마 운 트 된 가장 먼저 실행(독자 가 궁금 하 다 면 스 크 립 트 의 마 운 트 순 서 를 계속 조정 하여 로그 인쇄 가 상기 결론 과 일치 하 는 지 확인 할 수 있 습 니 다).
주의해 야 할 것 은 여러 스 크 립 트 의 실행 순서 가 어떻든 간 에 모든 스 크 립 트 의 Awake 함 수 는 모든 Start 함수 보다 먼저 실 행 될 것 입 니 다.모든 Start 함수 도 모든 Update 함수 보다 먼저 실 행 될 것 입 니 다.다른 순서 가 있 는 생명주기 함수 도 마찬가지 입 니 다.(위의 로그 정보 에서 도 볼 수 있 습 니 다)
4.사용자 정의 실행 순서
때때로 이러한 요구 가 있 을 수 있 습 니 다.A 스 크 립 트 의 속성 실례 화 는 B 스 크 립 트 의 속성 을 사용 해 야 할 수도 있 습 니 다.따라서 A 스 크 립 트 속성 실례 화 시 B 스 크 립 트 가 실례 화 되 었 음 을 보증 해 야 합 니 다.물론 우 리 는 A 스 크 립 트 에 먼저 걸 고 B 발 을 마 운 트 하 는 것 을 통 해 이 루어 질 수 있 습 니 다.그러나 실제 개발 에 사용 되 는 스 크 립 트 가 많아 서 각 스 크 립 트 가 마 운 트 된 우선 순 위 를 기억 하기 어렵다.그래서 유 니 티 는 스 크 립 트 Execution Order 설정 항목 을 제공 하여 여러 스 크 립 트 의 실행 순 서 를 설정 합 니 다.
프로젝트 패 널 에서 선택 한 스 크 립 트 파일 을 임의로 클릭 하면 속성 패 널 에 이 스 크 립 트 의 상세 한 정보 가 나타 납 니 다.오른쪽 상단
Execution Order...
을 선택 하고 다음 그림 과 같은 인 터 페 이 스 를 엽 니 다."+"를 누 르 면 스 크 립 트 를 추가 할 수 있 습 니 다.order 값 을 설정 할 수 있 습 니 다.order 값 이 작 을 수록 먼저 실행 하고 order 값 이 클 수록 나중에 실행 합 니 다.
이상 은 유 니 티 스 크 립 트 의 생명주기 와 실행 순서 에 대한 상세 한 내용 입 니 다.유 니 티 생명주기 에 대한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.