unity 12

(Unity) JSON을 통한 데이터 처리 in Unity

JSON은 웹이나 네트워크에서 서버와 클라이언트 사이에서 데이터를 주고 받을 때 사용하는 개방형 표준 포멧입니다. JSON은 XML에 비해서 가독성이 좋고 직렬화(Serialize)와 비직렬화(Deserialize) 함수를 통해서 데이터에서 JSON 데이터로, JSON 데이터에서 데이터로 편하게 변환할 수 있다는 장점을 가지고 있습니다. 이러한 JSON 포맷은 유니티에서도 많이 사용되는데, 네트워크 게임을 개발할 때 게임에 필요한 데이터를 주고 받거나, 게임 진행 상황을 저장하거나, 게임 설정을 저장하는 방식으로도 사용할 수 있습니다. 유니티에서 기본 제공하는 JsonUtility는 컴팩트한 최소한의 기능을 제공하는데, 이를 통해 직렬화 / 역직렬화로 게임 내 데이터와 Json데이터의 상호 변환이 쉽게 ..

Unity 2022.10.24

[디자인 패턴] 옵저버 패턴(Observer Pattern) in Unity

옵저버 패턴(Observer Pattern) 옵저버 패턴에는 상태를 가지고 있는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체가 있습니다. 여기서 옵저버는 말 그래도 무언가를 감시하는 역할을 한다는 뜻으로 어떤 '이벤트'가 일어나는 것을 감시하며 객체의 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 각 옵저버에게 통지하고 미리 정의해둔 어떠한 동작을 수행하도록 하는 디자인 패턴을 의미합니다. 더보기 - Subject가 Observer에 대해서 아는 것은 Observer가 특정 인터페이스를 구현한다는 것 뿐입니다. - Observer는 언제든지 새로 추가할 수 있습니다. - 새로운 형식의 Observer를 추가해도 Subject를 변경할 필요 없이 새로운 클래스에서 Observer 인터페이스만..

디자인 패턴 2022.10.20

(Unity) 코루틴, Couroutine

코루틴 (Couroutine) 유니티의 코루틴(Couroutine) 메서드는 대기 시간을 가질 수 있는 메서드입니다. 코루틴 메서드는 IEnumerator 타입을 반환해야 하며, 처리가 일시 대기할 곳에 yield 키워드를 명시해야 합니다. 코루틴의 동작 원리 집을 청소하는 메서드가 있다고 가정할 때, 일반적인 메서드는 한 번에 모든 방을 청소하는 방식으로 동작합니다. 모든 방을 청소하기 전에는 절대 쉬지 않습니다. void CleaningHouse() { // A방 청소 // B방 청소 // C방 청소 } 위 CleaningHouse() 메서드를 실행하면 처음부터 마지막 줄가지 중간에 멈추지 않고 처리가 진행됩니다. 따라서 A, B, C가 한 번에 모두 청소됩니다. 코루틴의 경우 집의 구역을 나누어 오..

Unity 2022.10.12

(Unity) C# 인터페이스(interface)

인터페이스(Interface) 인터페이스란 외부와 통신하는 공개 통로이며, 통로의 규격입니다. 인터페이스는 통로의 규격은 강제하지만 그 아래에 어떤 일이 일어날 지는 결정하지 않습니다. C# 인터페이스는 어떤 메서드를 구현하도록 강제하는 계약이라고 볼 수 있습니다. 인터페이스를 상속하는 클래스는 해당 인터페이스의 메서드를 반드시 구현해야 합니다. 따라서 해당 인터페이스의 메서드를 구현했음이 보장됩니다. 인터페이스의 메서드는 선언만 존재하고 구현이 없습니다. 즉, 메서드 형태만 결정하고 메서드 구현 방법은 자신을 상속하는 클래스에 맡깁니다. 인터페이스를 상속한 클래스는 인터페이스에 선언된 메서드를 반드시 public으로 구현해야 합니다. 인터페이스 사용 예시 public interface IItem { v..

Unity 2022.10.11

(Unity) 시네머신(Cinemachine)

시네머신(Cinemachine) 시네머신은 카메라의 움직임을 손쉽게 제어하는 유니티 공식 패키지로 카메라 연출에 필요한 코드와 조정 작업 대부분을 대체할 수 있습니다. 시네머신을 사용하면 레이싱, 어드벤처, TPS 등 장르마다 고유한 카메라 동작을 별다른 스크립트 작성없이 구현할 수 있습니다. 게임 플레이뿐만 아니라 게임 컷신에서도 많은 부분을 자동화할 수 있습니다. 시네머신의 컴포넌트들은 카메라 초점, 화면상의 피사체 배치, 추적의 지연시간이나 카메라 흔들림, 여러 카메라 사이에서의 전환 등 카메라 연출과 관련된 다양한 수치를 제공합니다. 이 값들을 연출 의도에 맞춰 변경하고 카메라가 추적할 대상만 지정하면 시네머신 카메라가 알아서 목표물을 화면에 담아냅니다. 시네머신의 원리 시네머신이 제공하는 카메라..

Unity 2022.10.10

(Unity) 오브젝트 풀링 (효율적인 오브젝트 반복 생성)

오브젝트 풀링 무한으로 오브젝트를 반복 생성할 때 가장 간단한 방법은 필요할 때 마다 매번 새로운 오브젝트를 생성하는 것입니다. 하지만 이러한 방식으로 하면 오브젝트 수가 계속 늘어날수록 메모리 사용량이 계속 증가합니다. 또한 새로운 오브젝트를 생성할 때마다 처리량이 늘어나 게임이 끊길 수 있습니다. 이 문제를 해결하기 위한 방식이 오브젝트 풀링 방식입니다. 오브젝트 풀링이란 초기에 필요한 만큼 오브젝트를 미리 만들어 '풀', 즉 웅덩이에 쌓아두는 방식입니다. 풀에 오브젝트를 생성해둔 이후에는 새로운 오브젝트가 필요할 때 새로운 오브젝트를 생성하지 않고 풀에 있는 오브젝트를 가져다 씁니다. 오브젝트가 필요 없을 때는 오브젝트를 파괴하지 않고 비활성화한 다음, 풀에 반환합니다. Instantiate() 메..

Unity 2022.08.30