Unity & C# 30

[유니티] Unity에 Nuget Package Import 하기

Nuget Package를 Unity에서 사용해야했던 적이 있으셨나요? 이번에 혼자 토이 프로젝트를 개발하다가 Nuget Package를 설치하려고 했는데요. Unity에서는 아직 공식적으로 Nuget Package를 import할 수 있는 방법이 없는 것 같더라고요. 그래서 구글링은 해보니 Nuget 을 Unity에 import 할 수 있는 2가지 방법을 찾을 수 있었습니다. 첫번째 방법(흔히 알려진 방법)으로는 open source asset인 NuGetForUnity를 사용하는 것입니다. 사용하는 방법은, - NuGetForUnity 깃헙에서 unitypackage 파일을 다운로드 한다. - unitypackage 파일을 유니티 데이터에 import 한다 (그냥 drag & drop 하면 된다) -..

Unity & C# 2022.07.09

[유니티] 색깔이 들어간 나만의 Debug.Log() 만들기

유니티 Console에 Log를 남길 때, 너무 많은 Log가 남아서 내가 원하는 Log 를 찾기 힘들 때가 있지요. 그럴 때 눈에 딱 띄게 색이 입혀져 있다면 편리 할 것 같아서, 나만의 Debug.Log()를 만들어보면 좋겠다는 생각이 들었습니다. Log Message에 색을 입히는 방법은 매우 간단합니다. log 하려는 string message에 태그로 감싸면 되고, "___" 부분에 자신이 원하는 색을 넣으면 됩니다. CustomDebug 라는 static class 를 만들어주고 Log함수를 만들어보겠습니다. 한가지 주목할 점은 태그에서 #을 붙이고 colorString을 넣었는데 그 이유는 colorString이 hexadecimal string이고(참고) 그 앞에 #을 붙여야 태그 안에서 ..

Unity & C# 2022.07.08

[유니티] Destroy() vs. DestoryImmediate() 차이점은?

유니티 개발하면서 오브젝트를 제거할 때 보통 Destroy() 함수를 사용하는데요. 그런데 DestroyImmediate()라는 녀석도 있습니다. 영어 해석을 해보면 "지금 당장 삭제해!" 가 될텐데요. Destroy() 와 DestroyImmediate()의 차이점을 알고 계신가요? 구글링을 해보니 이렇게 나오네요 Destroy() will set the object to null at the end of the frame and whereas DestroyImmediate() function immediately set object reference to null (참고) Destroy() 는 프레임 제일 끝에서 null을 만들지만 DestroyImmedaite()는 바로 null을 만들어버린다. 보..

Unity & C# 2022.07.07

[유니티] 간단 실험 : for loop in an update vs. multiple updates

유니티 개발을 하면서 "어떻게 작성하는 것이 더 최적화된 코드이지?" 라는 궁금증이 생기는 경우가 많이 있습니다. 그랬던 궁금증 중 한가지는 한 오브젝트가 update문에서 for loop를 돌면서 여러 오브젝트들의 함수를 실행하는 것이 빠를까 아니면 각 오브젝트들이 update문에서 자체적으로 실행하는 것이 빠를까 하는 궁금증이었습니다. 그래서 Unity Profiler를 통해서 어느 것이 더 빠른지 간단하게 실험을 해보았습니다. (Unity Profiler 사용법이 궁금하시다면 지난번 게시물을 확인해보세요 (https://lefthanddeveloper.tistory.com/25) 먼저 씬 배치는 다음과 같습니다. Target 오브젝트가 있고 Followers 오브젝트가 있는데 Followers 오브..

Unity & C# 2022.07.06

[유니티] Unity Profiler 사용하기

게임 최적화에 얼마나 열정적이신가요? 그냥 게임 잘 돌아가기만하면 최적화는 별로 신경 쓸 필요 없다고 생각하시나요? 아니면 코드 한줄한줄 작성할때마다 어떻게 해야 성능이 좋아질까 계속 고민하면서 코드를 작성하시나요? 유니티에서는 게임 성능을 측정할 수 있는 유용한 도구 Profiler를 제공하고 있습니다. 간단하게 Unity Profiler를 어떻게 사용하면 되는지 알아보도록 하겠습니다 아래의 스크린샷에서 보여주듯이 Profiler창은 Window -> Analysis -> Profiler 로 가서 열 수 있습니다. (또는 간편하게 Ctrl + 7 단축키를 사용해서도 열 수 있습니다) Profiler창을 열면 다음과 같이 나옵니다 빨간색 표시가 되어있는 항목은 각각 끄고 켜서 Profiler가 동작할때 ..

Unity & C# 2022.07.05

[C#] Switch문을 사용한 Type Pattern Matching

switch 문을 많이 활용하시나요? 저는 개인적으로 switch문을 많이 활용하지 않는 것 같습니다 (계속 if, else if, else if... 이어지며 못생긴 코드가 되어버리지요;;;). 그러다가 최근에 Type 비교를 하는 코드를 작성하다가 Swith문으로 Type 을 비교할 수 있을까? 라는 의문이 들어서 검색을 해보다가 C# 7 부터 가능한 Swith 문의 엄청나게 유용한 기능을 알게되었습니다. 바로 Switch문으로 Type이 같은지 확인을 할 수 있을 뿐만 아니라 더 나아가 그 비교된 Type으로 형변환 시킨 형식으로 변수를 활용할 수 있더라고요. 먼저 예시로 과일을 먹는 상황이라고 생각을 하고 여러 과일들 클래스를 만들어보겠습니다. 모든 과일은 IFruit 인터페이스를 구현하고 있습니..

Unity & C# 2022.06.26

[c#] Indexer [인덱서] 활용해보기

최근에 c#의 문법 중 Indexer (인덱서) 라고 하는 친구의 존재를 알게 되었습니다. 그래서 Indexer는 어떤식으로 사용할 수 있을지 생각해보다가 특정 클래스 안에 딕셔너리가 있고 그 딕셔너리를 public으로 직접 접근하지않고 Indexer로 딕셔너리의 Value값을 접근하는 것을 생각해보았습니다. 간략하게 인덱서의 문법을 설명해드리자면, public T this[int i] => arr[i]; 이런식으로 쓰이게 됩니다. 다른 클래스에서 접근할 때에는 해당 클래스 이름 뒤에 [파라미터 값] 을 넣어서 접근을하게됩니다. 예제로 Monster와 MonsterCollection이라는 클래스가 존재하고, MonsterCollection 클래스 안에는 Monster의 이름(string)을 Key값으로 ..

Unity & C# 2022.05.08

CustomEditor 활용하기 - Inspector Button만들기

최근 CustomEditor 활용하기 기능에 대해서 작성한 글을 이어서 이번엔 Inspector에서 Button을 만들어서 활용하는 방법을 알아보도록 하겠습니다. 이전 글에서 bool 값을 variable 보여주기를 했다면 이번엔 Button을 만들어서 자식들의 Transform을 List로 가져오게 해보도록하겠습니다. (이전 글 참조: https://lefthanddeveloper.tistory.com/21) MonoBehviour를 상속받는 InspectorButton 클래스를 작성해보겠습니다. 이 InspectorButton 클래스는 컴포넌트로 오브젝트에 붙게됩니다. public class InspectorButton : MonoBehaviour { public List childrenTr = ne..

Unity & C# 2022.04.06

CustomEditor 활용하기 - bool 값으로 variable 보여주기

직접 작성한 컴포넌트에 public이나 [SerializeField] 로 선언된 변수들이 사용되지 않는 경우들이 있습니다. 이럴 때 해당 변수들이 인스펙터에서 비어있는 것이 보기 싫을 때가 있죠. 이럴 때 toggle 버튼 역할을 하는 bool 값을 만들어서 해당 변수들이 쓰일 때는 인스펙터에서 보이고 쓰이지 않을 때는 보여주지 않는 기능을 한번 작성해보겠습니다. 먼저 예시로 쓰일 클래스 MyScript를 작성해보겠습니다. MyScript에는 다양한 변수들이 있습니다 bool 형태의 myNumber, string 형태의 myName, AudioSource 컴포넌트의 audioSource, Rigidbody 컴포넌트인 rigid. 그리고 우선 [HideInInspector]를 attribute를 붙여서 인..

Unity & C# 2022.04.03

[유니티] 왜 이제 알았을까 요놈 Animation Curve

최근 개발 중 쪼~~끔 수학 머리를 사용해서 수학 공식을 생각해서 특정 기능을 개발해야하는 순간이 있었는데 수학에 너무 약하기 때문에 고심하고 있을 때 지인 개발자께서 Animation Curve를 사용해보라는 제안을 하셨습니다. Animatin Curve는 존재 자체만 알고있었지 실제로 써본 적이 없었는데 이번에 써보면 너허어어어어무나 유용한 친구인 것을 깨닫게 되었습니다. 보통 수학 공식으로 결과값을 도출 해 내야 하는 경우에 Animation Curve를 쓰면 너무 유용할 것 같습니다. 아래 코드는 AnimationCurve를 사용해서 sphere의 움직임을 wave 처럼 움직이게 한 아주 심플한 예제 코드입니다. using UnityEngine; namespace AnimationCurvePrac..

Unity & C# 2021.12.16