Unity & C# 30

[C#] C# 과 .NET Framework

흔히들 C#과 .NET, 이 두 용어를 혼돈하여 많이들 사용한다. 나도 그저 .NET은 프레임워크이고 C#은 프로그래밍 언어이라는 차이점만 있다고 생각하고 있었는데, .NET Framework, .NET Core 등등 뒤에 점점 더 많은 .NET이 붙은 단어들이 나오면서 정확히 차이점이 무엇인지 모른 상태였다. 그러다가 TimCorey님의 유튜브를 보고 (링크), 아주 조금이나마 그 차이를 이해할 수 있게 되었다. 영상을 보면 팀 코리님께서 .NET Framework를 시작으로 시간 순으로 .NET의 역사를 알려주고 그로부터 파생된 프레임워크들을 알려주신다. C# C#은 그냥 잘 알고 있듯이, 프로그래밍 언어이다. 우리가 많이 듣는 Python, Javascript, Java 등등 그냥 컴퓨터에게 데이터..

Unity & C# 2023.03.25

[Unity] AudioSettings.dspTime 이란?

유니티로 음악이 관련된 콘텐츠를 만드는 것을 좋아하다보니, AudioSettings.dspTime이란 것을 자주 만나 볼 수 있었다. 그냥 구글링하면 사운드 관련된 정확도를 위해 사용하는 값이라고 대충만 알고 있다가, 정확히 무엇인지 알아봐야겠다는 생각이 들어서 찾아보게 되었다. DSP 란 Digital Signaling Processing 의 약자인데, 그렇다면 DSP Time 이란 디지털 신호 관련된 처리 시간이라고 유추해볼 수 있었다. 유니티에서 사용되는 dspTime은 오디오 시스템에서 처리된 실제 오디오 샘플 수에 기반하여 반환되는 double 값의 시간이라고 한다. 오디오 관련된 로직을 처리할 땐, 흔히 쓰는 Time.time의 float 값보다 더 정확하다. 그리고 dspTime은 Frame..

Unity & C# 2023.03.24

[C#] Flags Attribute를 활용하자!

다른 사람의 코드를 보다가 선언된 enum 앞에 [Flags] 또는 [System.Flags] attribute가 붙은 걸 보고 '이게 뭐지? 무슨 역할을 하지?' 하고 궁금해한 적이 있다. 궁금해만 하다가 이제서야 Flags attribute의 유용성을 알게 되었다. 특히 선언된 enum을 bitwise operation에 이용할 때 많이 유용하다. 예제로 flags를 착용 상태를 표현하도록 해본다. UseOfFlags라는 컴포넌트를 하나 만들어서, EquipStatus 변수를 public으로 선언하고 인스펙터에서 보면, 흔히 layer 를 선택할 수 있는 것처럼 다중 선택을 할 수 있다. Flags attribute의 유용함의 꽃은 log를 찍을 때 나타난다. 숫자 1~4 까지 bitwise "|" ..

Unity & C# 2022.08.15

[유니티] namespace 작성 꿀팁

동료 개발자분께서 유니티의 꿀팁을 알려주셨다. 유니티에서 namespace를 미리 지정해서 스크립트를 생성할 때 저절로 미리 지정된 namespace 안에 클래스가 생성되도록 하는 기능이다. Project Settings > Editor > Root namespace 란에 미리 지정할 namespace를 작성하면 된다. 아래 스크린샷에서 나는 "Lefthanddeveloper.Tistory"로 지정했다. Root namespace를 작성한 이 후, 유니티에서 script를 생성하면 아래와 같이 작성된 namespace 로 묶인 클래스가 생성된다. * Visual Studio 솔루션탐색기에서 생성한 class는 해당 기능이 적용되지 않는다. 오직 유니티 에디터에서 클래스를 생성했을 때에만 적용된다.

Unity & C# 2022.07.26

[유니티] 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#] event에 등록된 함수들은 언제 불릴까?

이벤트 호출 방법으로 UnityEvent, Action, 직접 delegate로 만든 event 등등 여러가지가 있다. 그렇다면 이벤트에 등록된 함수들은 언제 호출 될까 궁금했다. 같은 프레임에서 호출될까? 아니면 몇 프레임이 지난 뒤에 호출 될까? 그래서 테스트해보기로 했다. 이벤트를 호출하는 스크립트이다. using System; using UnityEngine; using UnityEngine.Events; public class EventFrameTest : MonoBehaviour { float frameNum = 0f; public UnityEvent spaceBarEvent; public Action action; public delegate void CustomEventHandler(); ..

Unity & C# 2022.07.15

[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