Unity

·Unity/최적화
문제일반적으로 생각하는 것과는 달리, Debug Log 함수들은 디버그 빌드에서만 작동하는게 아니라 릴리즈 빌드에서도 작동한다. 이는 성능 저하로 이어지기 때문에 빌드를 하기 전에 Debug Log 함수들을 지워주는 것이 좋다. 해결방안1. Conditional Attribute첫 번째는 Conditional Attribute를 사용해서 컴파일 시에 Debug.Log 호출 관련된 부분들을 제외하는 방법이다.일일이 찾아내서 지우기는 번거롭고 디버그 빌드에서 또 사용할 수도 있기 때문에, 다음과 같은 커스텀 클래스 및 함수를 작성해 Assets\Plugins 폴더 내에 저장한다.using System.Collections;using System.Collections.Generic;using UnityEngi..
·Unity/최적화
문제 배열에 대한 용어 설명부터 하자면 Multidimensional Array는 int[,]로 선언되는 배열이다. Jagged Array와는 달리 정해진 크기만큼의 '행렬'이라고 보면 된다. Jagged Array는 int[][]로 선언되는 배열이다. Array of Arrays라고도 한다. 배열로 이루어진 배열이기 때문에 각 요소 배열의 길이가 다를 수 있다. Single Array는 int[]로 선언되는 배열이다. 일반적으로 속도 면에서는 빠른순으로 나열하면 Single Array > Jagged Array > Multidimensional Array이다. 아래 내용은 출처 란의 스택오버플로우 글에서 발췌한 것이다. 다음과 같은 요소에 접근하는 코드를 작성했을 때, static void SetEle..
·Unity/최적화
문제 유니티에서 코루틴을 사용할 때, 일정 시간 뒤에 코드가 실행되고 싶으면 YieldInstruction 을 사용한다. 예를 들면 yield return new WaitForEndOfFrame(); 가 있다. yield는 가비지를 생성하지 않지만 계속해서 새로운 YieldInstruction 오브젝트를 만들면 가비지가 생성된다. 실험 public class CoroutineTest : MonoBehaviour { private WaitForEndOfFrame WaitForEndOfFrame = new WaitForEndOfFrame(); [SerializeField] private int count = 10000; [SerializeField] private bool useCache = true; pr..
·Unity/최적화
문제 재정의된 비교 연산자 MonoBehaviour 인스턴스가 null인지 아닌지 확인하고 싶을때 보통 이렇게 코드를 작성한다. if(myGameObject == null) { } 하지만 유니티는 == 연산자를 재정의해 사용하고 있기 때문에 생각과는 다르게 동작한다. 우선 유니티가 왜 이렇게 재정의해서 사용하게 됐는지 알아보자. 왜 그랬을까? 먼저 요약하자면 유니티는 다음 두가지의 이유로 ==를 재정의해서 사용한다. 에디터에서의 디버깅 용이성 C/C++로 이루어진 내부 구현과 C# 래퍼 오브젝트, 그로 인한 오브젝트 생명주기의 차이 디버깅 용이성 첫 번째로, Inspector에서 보여지는 필드들(public, SerializedField)에 대한 디버깅 용이성이다. Monobehaviour가 어떤 필드를..
virtus
'Unity' 태그의 글 목록 (3 Page)