Unity 18

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

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

Unity 2022.10.24

(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

(Unity) 벡터 연산으로 평행이동 구현하기, transform

벡터의 속기 Vector3 타입에는 '속기'라는 미리 만들어진 편리한 변수들이 있습니다. 자주 사용되는 Vector3 값은 속기를 사용해 다음과 같은 형태로 즉시 생성할 수 있습니다. 예제 Vector3 position = Vector3.up; 위 코드는 Vector3 position = new Vector3(0, 1, 0);과 같은 동작을 합니다. https://step-forward.tistory.com/10?category=956734 (벡터의 활용 포스팅) 이전 벡터의 활용 포스팅에서 벡터값을 생성할 때 new Vector3(x, y, z)과 같은 형태의 생성자를 만든다고 했는데, 벡터의 속기를 활용하여 편하게 자주 사용되는 Vector3 값을 생성할 수 있습니다. Vector3의 속기 Vecto..

Unity 2022.08.26