목록Dev. Study Note/Unity (49)
Priv's Blog
1. 이벤트를 통한 타 클래스 메서드 호출 방식delegate, event, Action 등의 기능을 활용하여 타 클래스의 메서드를 구독해 두고 이벤트 형태로 호출하는 방법은 클래스 간의 의존도를 줄이고 불필요한 결집도를 피하기 위해 자주 사용되는 방법입니다.개인적으로 델리게이트 타입을 정의하고, 델리게이트 타입의 이벤트 변수를 정의한 다음, 그 이벤트 변수에 구독할 메서드를 델리게이트 체인 방식으로 등록하는 방법이 손에 익어서 자주 사용합니다.하지만 이러한 이벤트 호출 방법을 활용해도 '휴먼 에러'를 피하기에는 역부족입니다.델리게이트 체인에 어떠한 메서드를 구독했다면, 필히 불필요한 상황에서는 해제하는 작업을 별도로 진행해주어야 합니다.이 등록/해제 작업에 신경 써주지 않으면 어디서 어떻게 메모리가 낭..
1. 개요게임을 구현할 때 사물을 움직이게 하는 것은 가장 기본적이면서도 중요한 부분입니다.일반적으로 자연스러운 움직임을 구현하고 싶다면, 물리 역학 계산을 거쳐서 사물에 '힘을 가해' 움직입니다.경우에 따라서 Transform.translate( ) 메서드처럼 처음부터 그냥 좌표 값 자체를 바꿔버리는 방법도 있지만, 이는 물리적인 영향을 무시하기 때문에 자연스러움(현실적)과는 거리가 멉니다.Unity 엔진에서는 물리를 구현하기 위해 Rigidbody 컴포넌트를 사용합니다.이 Rigidbody를 이용하여 사물에 힘을 가하고 그 힘으로 물체를 움직이고 싶을 때는 일반적으로 AddForce( ) 메서드를 사용하죠.이 AddForce( ) 메서드는 가하는 힘(Force)과 그 힘을 가하는 방식을 매개변수로 받..
1. Unity EventUnity Event는 Unity 엔진 차원에서 제공하는 이벤트 기능으로, 에디터 상에서 작업이 이루어지는 디자인 단계에서 게임 오브젝트 사이의 함수 호출을 후크할 수 있도록 만들어져 있습니다.별도의 스크립트 코드를 작성하지 않아도 마우스 클릭 몇 번으로도 간단하게 기능을 구현할 수 있어서 디자인 단계에서 활용하기에 적합합니다.물론, C# 스크립트 작업을 할 때도 Unity Event를 다룰 수 있습니다.UnityEvent 타입의 변수를 생성한 뒤, AddListener( ) 메서드로 이벤트 호출 시 반응할 리스너를 연결하고, Invoke( ) 메서드로 이벤트를 발동하는 형식입니다.다만 Unity Event를 에디터 상에서 직접 조작할 수 있다는 장점을 살리기 위해서는 매개변수를..
1. 캡슐화Unity 엔진은 C# 언어를 스크립트 언어로 사용한다.C#은 대표적인 OOP 언어 중 하나로, OOP 언어의 대표적인 특징 중 하나인 캡슐화를 보장하기 위해 다양한 속성들을 제공한다.그중 대표적인 속성 중 하나가 [SerializeField] 속성이다. Apply object-oriented principles: Encapsulation in object-oriented programming출처 Encapsulation in object-oriented programming - Unity Learn In this tutorial, you’ll learn about the second pillar in object-oriented programming: encapsulation. Explain..
1. JsonUtilityUnity는 기본적으로 Json을 이용해 데이터를 외부에 저장할 수 있는 기능을 지원합니다.Unity Learn에서는 세션 간의 데이터 지속성으로 설명하고 있으며, 직렬화/역직렬화 개념을 기반으로 합니다. Manage scene flow and data: Implement data persistence between sessions출처 Implement data persistence between sessions - Unity Learn In this tutorial, you’ll write code to save and load the color that the user selects so that it persists between sessions of the applicat..
1. 오버로딩 (Overloading)C#에서 사용되는 메서드는 OOP 언어의 개념 중 하나인 다형성에 기반하여 오버로딩이라는 기능을 사용할 수 있습니다.원래 메서드는 고유한 이름을 이용해 정의됩니다.메서드의 이름은 메서드 호출 시에 사용되기 때문에 말 그대로 '이름'의 의미를 지닙니다.하지만 사람들의 이름처럼 메서드의 이름도 '동명이인'이 존재할 수 있습니다.우리가 알고 있는 동명이인이라는 개념을 조금 더 살펴보자면, '이름'은 같지만 '존재'는 다른 두 명 이상의 사람이라고 말할 수 있습니다.여기서 '존재'는 뭘까요?더 쉽게 비유하자면, '알맹이'에 가깝습니다.얼굴도 다르고, 가정도 다르고, 나이도, 태어난 곳도 다른, 말 그대로 '다른 존재'입니다.그 존재를 호출하는 데 사용되는 이름이라는 것만 같..
1. ScriptableObject ScriptableObject는 Unity에서 데이터를 관리하는 컨테이너 중 하나로, 값의 사본이 불필요하게 많이 생성되는 것을 방지하여 메모리 사용량을 절약하는데 유용하게 사용됩니다. 세 종류의 몬스터가 서로 같은 체력과 공격력을 가지고 있다고 가정하면, 각각의 프리팹이 개별적인 데이터를 지니고 있기 때문에 몬스터의 수가 늘어나면 그만큼 사본의 수도 늘어나 메모리가 크게 낭비됩니다. 하지만 ScriptableObject를 사용하면, 게임 내 모든 몬스터가 하나의 ScriptableObject 데이터를 참조하여 사용하기 때문에 아무리 몬스터의 수가 늘어나도 사본의 수는 늘어나지 않습니다. 2. 에디터 버전과 빌드 버전은 다르다. Unity 에디터 상에서 Scriptab..
1. Mathf.Lerp( ) Mathf 라이브러리에서 제공하는 Learp( ) 메서드는 선형 보간을 구현할 수 있게 해주는 메서드입니다. 흔히 말하는 '부드럽게 이동하기' 기능을 구현하기 위해서 종종 마주하게 되는 메서드입니다. 선형 보간은 쉽게 말해서 두 값이 주어졌을 때, 두 값 사이를 직선으로 이은 뒤, 선형적으로 그 사이의 값을 추정해 내는 기법입니다. 이해를 쉽게 하기 위해 덧붙이자면, AMD에서 개발해 제공하는 Fluid Motion Video 기술을 설명할 때도 '보간'이라는 단어가 등장합니다. Fluid Motion Video 기술은 영상의 두 프레임 사이의 이미지를 추정해 그려낸 뒤, 이를 삽입하여 기존의 영상보다 더 많은 프레임을 지닌(더 부드러운) 영상을 만들어내는 기술입니다. Un..