unity 20

[유니티] sprite atlas로 draw call을 줄여보자

sprite atlas 로 sprite들을 하나의 텍스쳐로 합쳐서 최적화를 할 수 있다. 유니티 패키지에서 2d sprite를 다운받아서 UI 이미지로 쓰이는 각각의 이미지들을 한 sprite atlas로 합쳐보았다. 최근에 작업한 토이 프로젝트 Dancing Finger 에서 sprite atlas를 사용해보았고, draw call 이 줄어드는 것을 확인 할 수 있었다. 먼저 sprite atlas 를 사용하기 위해선 유니티 패키지에서 2d sprite를 다운 받는다. 그 다음에 Project Setting > Editor > Sprite Packer Mode에서 "Sprite Atlas V1 - Always Enabled" 로 바꾼다. 비교를 하기 위해 Sprite Atlas를 사용하기 전의 Draw..

Unity & C# 2022.07.24

[유니티] 스크립트 아이콘 변경

가끔 유니티 에셋스토어에서 에셋을 다운받았을 때 그 에셋에 들어있는 스크립트들의 아이콘이 다른 걸 본 적있다. 유니티에서 스크립트를 생성하면 기본 아이콘 모양은 흰색 종이에 "#' 이 초록책으로 적혀져있는데, 나도 아이콘을 바꿔보고 싶었다. 방법은 너무 간단했다. 스크립트를 클릭하고 Insepctor에 아이콘 모양을 클릭하고 "Other" 를 선택해서 원하는 Sprite를 선택하면 아이콘을 바꿀 수 있다. 아래 사진는 최근에 작업한 오픈소스 토이프로젝트 Dancing Finger에 들어간 스크립트들의 아이콘을 바꾼 모습이다. (Dancing Fingers). Project View 와 Inspector view에서 스크립트들의 아이콘들이 lefthanddeveloper logo(파란색 손) 모양으로 바뀌..

Unity & C# 2022.07.24

[유니티] 클립보드 복사 기능 구현하기

웹 개발 쪽에선 특정 주소나 token을 복사해야하는 경우가 많기 때문에 copy 버튼이 있어서 그 버튼을 누르면 클립보드에 복사하는 기능을 자주 볼 수 있다. 이번에 open source 토이프로젝트로 만들었던 Dancing Fingers에서 contact 란에 내 이메일을 넣고, 유저들이 쉽게 내 이메일을 복사할 수 있도록 클립보드 복사 기능을 넣어보려고 해서, 유니티에서 클립보드 복사 기능을 찾아보았다. 유니티의 GUIUtility 클래스의 systemCopyBuffer가 그 역할을 해준다. GUIUtility.systemCopyBuffer 에 복사하려는 string값을 set 해주기만 하면 된다. 아래 Dancing Fingers 프로젝트에서 clipboard copy 를 위해 사용했던 코드 내용..

Unity & C# 2022.07.22

[c#] Obsolete 활용하기

Attribute 중 Obsolete 라는 친구가 있다. 영단어 해석을 하면 "더 이상 쓸모 없는" 이라는 뜻인데, 해석의 뜻과 같이 더 이상 필요없는 class나 변수, 함수에 쓸 수 있다. 사용 방법은 간단하다. 더 이상 쓰지 않는 class, 변수, 함수 앞에 [Obsolete("string")] 형식으로 작성을 하면 된다. 유니티에서는 Monobehaviour를 상속받는 클래스, 즉 컴포넌트로 쓰일 클래스 앞에 Obsolete를 쓰면, 다음과 같은 모습이 인스펙터에서 보인다. 여기서 "Not Supported Anymore" 라는 메세지는 Obsolete Attribute의 파라미터로 넘긴 string 값이다. 코드를 살펴보면 다음과 같다. (빨간색 화살표) 그리고 함수 앞에 Obsolete를 추..

Unity & C# 2022.07.14

[유니티] Frame Debugger 사용하기

유니티 Profiler 기능 중에 Frame Debugger라는 유용한 Debugging 툴이 있다. 한 프레임에서 Rendering이 이루어지는 것을 볼 수 있다. Frame Debugger는 유니티 에디터가 Play 중일 때 Profiler에서 Rendering을 클릭 하고 아래에 Open Frame Debugger를 클릭하여 열 수 있다. Frame Debugger가 열리면, 에디터에서 Game View에서 빨간색 글씨로 "Frame Debugger On" 이라고 뜨게 된다. 그리고 Frame Debugger 창에서 상단에 Range Bar 가 보일텐데(아래 스샷에서 파란색 화살표), 그 Range Bar를 마우스로 드래그 하면 해당 프레임에서 렌더링 되는 순서를 하나씩 보여준다. Frame Deb..

Unity & C# 2022.07.12

[유니티] 간단 실험 : 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

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

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

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

Unity & C# 2021.12.16