본문 바로가기

TOOL/Unity

Unity 문제 어느것이 더 빠른가? 1. 1천개의 MonoBehaviour를 상속받는 GameObject의 Update 처리2. MonoBehaviour를 상속받는 GameObject 하나에 천개의 Class array가 있고 그 class array요서 각각의 커스텀 Update Callback 처리 정답 : Unity의 Update는 Reflaction을 이용하기 때문에 Direct Call보다 느리다. Unity에서 Start, Update, FixedUpdate, Destroy, OnTrigger 등은 Override해서 작동시키는게 아니다.즉, MonoBehaviour의 다형성을 이용하는 구조가 아니다. 참고https://cliwo.tistory.com/9?category=739025
Draw call / Batch Draw call CPU가 GPU에게 Scene을 한번 그려라 라는 명령을 내리는 것이라 보면 된다.Draw call은 CPU메모리를 많이 먹으므로 이 횟수를 줄이는 것이 최적화에 중요하다. Batch Unity에서는 기존에 Draw call이라는 것을 사용하다 5버전부터 Batch라는 단어로 대신 사용한다.Batching 과 Draw call은 개념상 다르나 결국 1회의 Batching이 끝나면 1회의 Draw call이 발생하기때문에Draw call 횟수 = Batching 횟수 이기 떄문에 단어의 차이일 뿐 의미는 같다고 볼 수 있다. 예를들어 Command Buffer상의 SetState( ) 호출작업, 그려질 Triangle의 정보들을 셋팅하는 작업, Rendering State를 셋팅하는 작업..
Frame 고정값 셋팅 Application.targetFrameRate 값을 설정해주면 해당 Frame값으로 고정이 된다. 대신 frame 고정을 사용할땐 QualitySettings.vSyncCount = 0; 으로 vSync를 사용하지 않아야 한다. //60 frame으로 고정 Application.targetFrameRate = 60; //vSync Off QualitySettings.vSyncCount = 0;
Scriptable Object Scriptable Object Unity에서 Script를 Component형식으로 사용하지 않고 Script자체를 Object로 사용하는 방식이다.기존의 XML이나 JSON을 대신해서 데이터를 일정 고정값으로 보관하고 있다가 해당 data가 필요할 때Scriptable Object를 new 하지 않고 data를 사용할 수 있다. 일종의 data만 가지고 있는 object를 사용하기 위해 있는 것이다.해당객체는 생성시 new가 아닌 CreateInstance를 사용해야 한다. public class BuildSetting : ScriptableOjbect { [SerializeField, Tooltip("빌드 결과물(apk 파일의 이름")] private string m_buildName = "Game..
Coroutine / IEnumerator / IEnumerable StartCoroutine( ) StartCoroutine의 내부를 까보니StartCoroutine_Auto로 수행되고해당함수는 숨겨져있어서 볼수가 없다.아마 C++로 내부적으로 처리하는거같은데.. IEnumerator IEnumerator 는 C++의 iterator같은 것이다.인자값에 ref나 out을 사용할 수 없다. IEnumerator SomeNumbers() { Debug.Log("3"); yield return 3; Debug.Log("5"); yield return 5; Debug.Log("8"); yield return 8; } IEnumerator enumerator; void Start () { enumerator = SomeNumbers(); object cur; cur = enum..
Unity CG / Boehm-Demer-Weiser / 점진적 GC Unity GC Unity에서는 Boehm-Demer-Wiser(줄여서 Boehm방식 GC)를 사용한다.이는 Stop the world방식의 GC이다. 하지만 기존의 Boehm방식의 GC는 C / C++을 타겟으로 만들어진 라이브러리였다.그래서 Mono2.8 이상부턴 SGen으로 GC를 변경하였지만Unity는 Mono2.8 이하버젼이므로 Boehm방식 GC를 사용한다. 점진적 GC 비점진적 GC의경우 GC가 발생하면 Stop the world를 한 후 한번에 모든 GC처리를 수행 한 후 프로그램을 작동시킨다.하지만 점진적 GC의 경우 GC작업을 여러개의 슬라이스로 분할하여 GC작업을 위해 프로그램 실행을 한번에 오랫동안 중단하지 않고여러번에 걸쳐 짧게 중단하는 방법이다.GC의 수행시간이 짧아지는건 아니지..
Unity Heap Memory 구조 Unity는 Code 영역을 제외하고 크게 두가지 Heap Memory를 관리한다. Native heap Memory(Unity Engine이 관리하는 Memory) Unity Engine이 내부적으로 C++로 구현되어 있기 때문에 Native Heap이다.Unity Engine이 OS로부터 memory를 할당받아 texture, sound, level data등을 저장하고 있는 영역으로unity engine이 담당하여 scene전환이 일어날 떄 필요없게 된 resource를 해제하는 작업을 engine이 자동으로 수행한다. Engine에 의해 memory가 자동으로 해제되지 않는 경우 DontDestroyOnLoad( ) 함수를 통해 개발자가 scene전환이 일어나도 memory가 해제되지 않도록 설정..
Mono / Mono Behaviour Mono Mono는 .NET Framework의 open source platform으로서 cross-platform application의 개발을 지원한다.C# 과 CLI에 기반을 두고있다. Unity의 Mono Unity Scripting system의 기반이다..NET에 깁나하지만 다른 여러 프로그래밍 언어를 지원하는 .NET과 달리 C#, Boo, Javascript만 지원한다. Scripting Language Scripting Language 혹은 extension language는 하나 이상의 application에서 script를 지원하는 프로그래밍의 부분집합(Subset)이다. Script Script는 Application의 core code와는 별개의 언어로서 최종 사용자에 의해 작성..