수색…


오버라이드 (override)되지 않는 메소드

Awake , Start , Update 및 다른 메소드를 재정의 할 필요가없는 이유는 기본 클래스에 정의 된 가상 메소드가 아니기 때문입니다.

스크립트가 처음 액세스 될 때 스크립팅 런타임은 스크립트를 통해 일부 메소드가 정의되어 있는지 확인합니다. 정보가있는 경우 해당 정보가 캐싱되고 메서드가 해당 목록에 추가됩니다. 이러한 목록은 다른 시간에 반복됩니다.

이러한 방법이 가상이 아닌 이유는 성능 때문입니다. 모든 스크립트에 Awake , Start , OnEnable , OnDisable , Update , LateUpdateFixedUpdate 가 있으면 목록에 추가되어 모든 메소드가 실행된다는 것을 의미합니다. 일반적으로 이것은 큰 문제는 아니지만, 이러한 모든 메서드 호출은 네이티브 측 (C ++)에서 관리 측 (C #)으로 이루어지며 성능 비용이 발생합니다.

이제 이것을 상상해보십시오.이 모든 메서드는 목록에 있지만 일부 또는 대부분은 실제 메서드 본문이 없을 수도 있습니다. 이것은 심지어 아무 것도하지 않는 메서드를 호출 할 때 엄청난 양의 성능 낭비가 있음을 의미합니다. 이를 방지하기 위해 Unity는 가상 메소드 사용을 거부하고 실제로 정의 된 경우에만 이러한 메소드가 호출되도록하는 메시징 시스템을 작성하여 불필요한 메소드 호출을 저장합니다.

Unity 블로그에서이 문제에 대한 자세한 내용은 여기를 참조하십시오 : 10000 Update () IL2CPP에 대한 자세한 내용은 여기를 참조하십시오. IL2CPP 소개



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow