c# 9

[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

[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

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

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

Unity & C# 2021.12.16

[C#] for loop에서 Lambda 사용 시 iteration variable 사용 주의

C#이나 Javascript 두 언어 다 개인적으로 Lambda 식을 많이 사용하는데요. 최근 for loop 안에서 lambda 식을 사용 했을 때 예상치 못한 결과가 계속 나와서 충격을 받았던 경험이 있었습니다. 그 경험을 공유하려고 합니다. 예시 상황은, Button들이 array에 담겨져 있고 for loop를 돌면서 이벤트를 등록했습니다. using UnityEngine; using UnityEngine.UI; namespace LambdaInForLoop { public class ButtonManager : MonoBehaviour { [SerializeField] private Button[] buttons; void Start() { for (int i = 0; i < buttons.Le..

Unity & C# 2021.12.11

C# event에서 listener들을 unsubscribe하는 법

유니티에서 제공하는 UnityEvent 클래스에서는 RemoveAllListeners()라고 하는 함수가 subsribe 되어있는 listener들을 다 unsubscribe 해주는 역할을 합니다. 그렇다면 c# 의 event에서는 subscribers 들을 어떻게 unsubscribe 할 수 있을까요? C# event에서도 등록되어있는 delegate를 array로 가져올 수 있는 함수가 있습니다. 바로 GetInvocationList()입니다. subsriber들을 array로 가져올 수 있다면 쉽게 그냥 foreach 문을 돌면서 -= 로 unsubsribe 해주면 되겠죠? 테스트를 위해 EventSubscriber class와 Monobehaviour 를 상속받는 EventInvoker class..

Unity & C# 2021.10.19

C# Extension Method 활용하여 MonoBehaviour에서 자주 사용하는 Delay 만들기

유니티에서 게임을 만들다가 보면 Delay(지연)을 주고 싶을 때가 많은 데요. Delay를 주는 방법으로 여러 방법이 있겠지만 개인적으로 자주 사용하는 방법은 유니티의 Coroutine를 사용하여 많이 구현하는데요. 그런데 이 Delay 코루틴도 반복해서 사용하다보니깐 이거를 C# Extension Method를 활용해서 MonoBehaviour클래스에서 편하게 사용할 수 있도록 하면 좋겠다는 생각이 들었습니다. 먼저 C# Extension Method가 무엇이냐면, 이미 구현된 타입(클래스, 인터페이스,...)에 추가로 Method를 만들 수 있는 기능입니다. Extension Method 말 그대로 확장된(추가된) 메소드라고 생각하면 좋을 듯합니다. 아래는 보통 Delay를 주고 싶을 때 Corou..

Unity & C# 2021.10.19

List<T>를 상속받아 CustomList<T> 만들기

List를 사용 할 때 마다 이런 기능이 있었으면 좋겠다고 생각한 적이 있다. 바로 리스트에 아이템이 추가되거나 제거 되었을 때 이벤트를 실행 시킬 수 있으면 여러 용도로 사용할 수 있겠다는 생각을 했다. 그래서 C#의 List를 상속받는 자신만의 CustomList를 만들어 보았다. CustomList.cs 먼저 CustomList.cs 를 생성해서 C#의 List를 상속받는다. using System.Collections.Generic; namespace CustomList { public interface ICustomListable { } public class CustomList : List where T : ICustomListable { public delegate void CustomLis..

Unity & C# 2021.09.16

[VR] Inside Cube

VR 플레이시 화면의 VR 카메라가 아닌 다른 일반 카메라의 화면을 출력할 수 있다는 사실을 알게 된 후, 이걸 이용해서 무엇을 만들어 볼 수 있을까 고민을 해보다가 VR 플레이어의 모습을 3인칭 시점으로 프로젝션 맵핑을 하면 재밌을 것 같다는 생각을 해보았다. VR 플레이어는 큐브 속에 들어가 있고, 이 큐브의 벽들은 더 조그마한 큐브들로 이루어져있다. 이 벽들을 이루고 있는 각각의 큐브들은 VR 플레이어의 손 collider에 반응을 할 수 있게 해보았다. 반응은 색, 소리, 스케일에 변화를 줘보았다. Unity Gameview 벽에 Projection Mapping 모습 프로젝터는 집에서 그냥 넷플릭스나 유튜브 볼 때 사용하는 프로젝터를 사용하여 실제 Projection Mapping 전시에서 쓰이..

Playground 2021.09.16