Unity & C# 30

[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

[유니티] Unity Remote 5 활용하여 모바일 개발하기

잠시 본가인 대구에 와있으면서 VR 장비가 없어 VR 개발은 잠시 쉬고 오랜만에 모바일 개발을 해볼까라는 생각이 들었습니다. 유니티로 모바일 개발할 때 테스팅 하기 너어어어무 편하게 해주는 Unity Remote 5라는 앱을 소개시켜드리고, 사용하는 방법을 나누고자 합니다. 먼저 다음 링크로 가셔서 핸드폰에 Unity Remote 5를 설치해줍니다 링크: https://play.google.com/store/apps/details?id=com.unity3d.mobileremote&hl=en&gl=US Unity Remote 5 - Apps on Google Play Unity Remote 5 on your Android device to test your game live in the Unity Edit..

Unity & C# 2021.12.02

[C# 문법] Reference Type 과 Value Type의 차이점

혹시 Reference Type과 Value Type에 대해서 들어보셨나요? 저도 막연하게 이론적으로만 알고 있다가 개발을 하면서 "아 이래서 Reference Type 이고 이래서 Value Type 이군아!' 라고 확 와닿은 이후로 좀 더 잘 이해하게 되었습니다. 번역 그대로 하면 Reference Type은 참조 타입이고 Value Type은 값 타입이라는 건데, 그렇다면 차이점은 뭘까요? Class 와 Struct의 차이점들 중에 하나가 바로 Class는 Reference Type 이고 Struct은 Value Type 입니다. 함수에 파라미터로 각각의 타입을 넘기는 상황을 보면 보다 쉽게 이해 할 수 있습니다. using UnityEngine; public class ReferenceExampl..

Unity & C# 2021.11.14

[유니티 C#] Json 저장 & 불러오기 너무 쉽게 구현하기

처음 유니티를 배우기 시작했을때 저장을 구현해야하는 순간이 찾아오면 어떻게 구현해야하는지 찾아보지도 않은채, 그저 '너무 어려울꺼같다' '지금 실력으로는 구현하기 힘들겠지?' 라고 무턱 겁부터 먹었던 기억이 있습니다. 그런데 지금 와서 생각해보면 왜 그렇게 겁을 냈을까? 라고 생각이 들고 왜 구현하려고 시도조차 하려고 하지 않았을까 후회가 되는 거같네요. 알고 보면 별거 아니고, 정말 쉽게 구현할 수 있는데 말이죠. 저장을 할 때 저장파일 포맷으로 여러가지가 있는데 오늘은 Json 파일로 저장하는 방법에 대해서 알아보도록 하겠습니다. Json 형태로 저장하는게 어렵지는 않을까? 생각할 수도있는데 전혀 그렇지 않습니다. 너무 쉬워서 예전에 겁먹었던 것이 허무할 정도이죠... JsonUtility이라고 하는..

Unity & C# 2021.11.12

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

SourceTree에서 Git LFS 적용하기

최근 팀 작업에서 프로젝트 관리 툴로 Github과 SourceTree를 사용하고 있다. SourceTree는 이런게 있다하고 들어보기만 하고 실제로 사용해 본적이 없어 이번 기회에 공부도 하고 익숙해질겸 사용해보기로 했다. 팀 프로젝트 진행 도중 파일당 100MB가 넘는 경우가 많이 있어 그럴때마다 Push를 할 수 없다고 에러가 떴다. 그래서 용량이 큰 파일들을 처리할 수 있는 것이 Git LFS 인데 검색을 해보니 SourceTree에서는 Git LFS를 쉽게 적용할 수 있다고 나왔다. 검색을 해보니 제일 처음 repository를 clone 했을 때(push를 한번도 하지않은 상태에서) git lfs를 설정해주어야한다고 한다. (그런데 처음에 하지 않고 push가 이루어진 후에도 되는 것 같긴하다..

Unity & C# 2021.09.30

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

DOTween (HOTween v2)를 활용한 애니메이션 연출

제가 즐겨사용하는 Plugin DOTween 를 활용하여 Unity에서 쫀쫀(?)한 애니메이션 연출을 알아보도록 하겠습니다. DOTween 설치 먼저 Unity PackageManager에서 Dotween을 검색하여 DOTween (HOTween v2)를 download 및 import 해줍니다. import 완료 후 패널이 하나 뜰텐데요 Open DOTween Utility Panel -> Setup DOTween -> Apply를 클릭해 줍니다. Scene 세팅 그리고 Scene에 애니메이션이 들어갈 Cube를 아래와 같이 배치해보겠습니다. Cube.cs Cube.cs 클래스를 만들어서 각 큐브의 component로 붙여줍니다. using System.Collections; using System.C..

Unity & C# 2021.09.16

URP에서 VR + PC 두 화면 따로 출력하기

Unity Version: 2020.3.14f1 Platform: PC, Mac & Linux Standalone Template: Universal Render Pipeline VR Plugin: Oculus Integration (v32.0) VR 헤드셋을 착용하고 있는 사람의 화면과 PC에서 나오는 화면을 각각 따로 나오게 하고 싶을 경우가 있다. 나의 경우는 VR 플레이어의 모습을 3인칭으로 보는 화면을 미디어아트 프로젝트로 활용하고 싶었다. VR 카메라 화면이 아닌 일반 camera를 나오게 하는 방법은 어렵지않다. 씬에 VR camera와 일반 camera를 두 개 배치하고 일반 camera에 camera depth값을 VR Camera 보다 높여주면 된다. 3D 또는 HDRP template..

Unity & C# 2021.09.15