목록Study Memo/Unity (51)
Priv's Blog

1. OnDisable( )OnDisable( ) 메서드는 객체가 파괴(Destroy)되거나, 비활성화(SetActive(false))되는 상황처럼 대상이 '사라질 때' 발동되는 이벤트 메서드입니다.이 때문에 OnDisable( )은 객체가 사라지면서 가지고 있던 참조나 변수 값들을 '정리'하기 위해 주로 사용됩니다.이벤트 리스너를 삭제하거나, 변경되었던 변수의 값들을 초기화하는 것이 대표적입니다.그렇다면 OnDisable( ) 메서드가 호출되는 시점을 어떻게 이해해야 할까요? 2. OnDisable( )이 발동되는 시점아래와 같이 싱글턴 타입의 클래스를 간단히 생성하고, OnDisable( )을 다른 클래스에서 호출합니다.public class GameControlApplicationQuitCheck..

1. 개요UI 오브젝트와 게임 오브젝트가 겹쳐진 상태로 배치되어 있을 경우, 클릭 이벤트를 감지할 때 겹쳐진 두 종류의 오브젝트가 동시에 반응하는 문제가 발생할 수 있습니다.public class GameControlObjectClickController : MonoBehaviour { private void OnSelect() { Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue()); if (Physics.Raycast(ray, out RaycastHit hit)) { if (hit.transform.gameObject.layer == LayerMask.NameToLayer..

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 언어의 개념 중 하나인 다형성에 기반하여 오버로딩이라는 기능을 사용할 수 있습니다.원래 메서드는 고유한 이름을 이용해 정의됩니다.메서드의 이름은 메서드 호출 시에 사용되기 때문에 말 그대로 '이름'의 의미를 지닙니다.하지만 사람들의 이름처럼 메서드의 이름도 '동명이인'이 존재할 수 있습니다.우리가 알고 있는 동명이인이라는 개념을 조금 더 살펴보자면, '이름'은 같지만 '존재'는 다른 두 명 이상의 사람이라고 말할 수 있습니다.여기서 '존재'는 뭘까요?더 쉽게 비유하자면, '알맹이'에 가깝습니다.얼굴도 다르고, 가정도 다르고, 나이도, 태어난 곳도 다른, 말 그대로 '다른 존재'입니다.그 존재를 호출하는 데 사용되는 이름이라는 것만 같..