유니티 9

[디자인 패턴] 싱글톤 패턴

싱글톤 패턴 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴 즉, 싱글톤 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴합니다. 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있습니다. 단점으로는 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 객체 지향 설계 원칙 중 '개방-폐쇄 원칙' 이 위배됩니다. 결합도가 높아지게 되면, 유지보수가 힘들고 테..

디자인 패턴 2022.10.19

(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

(Github) 커밋 오류 Github Desktop "warning: LF will be replaced by CRLF"

Github Desktop "warning: LF will be replaced by CRLF" 유니티 프로젝트를 만들고 버전 업데이트를 위해 커밋을 하던 중 다음과 같은 오류가 나타났습니다. https://answers.unity.com/questions/1668898/github-desktop-warning-lf-will-be-replaced-by-crlf.html Github Desktop "warning: LF will be replaced by CRLF" - Unity Answers answers.unity.com 링크의 답변에 따르면 프로젝트 폴더의 .gitignore로 들어가 위와 같이 파일 경로 앞에 자신의 프로젝트 이름을 추가한 뒤 다시 커밋을 진행하면 오류없이 잘 진행됩니다.

(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

(Unity) Text, TextMeshPro 사용하기

유니티 공부 중 다른 예제나 책에서는 Hierarchy - UI - Text를 사용하는데 최근 버전의 유니티를 사용한다면 UI를 눌렸을 때 Text가 안 보이고 TextMeshPro만 존재할 것입니다. -> Hierarchy - UI - Legacy - Text 로 사용가능합니다. Text가 아닌 TextMeshPro를 사용한다면, 기존 Text와 TextMeshPro는 약간의 차이가 있지만 조금만 수정하면 되기 때문에 어렵지 않습니다. TextMeshPro의 사용을 위해서는 맨 위에 using TMPro를 추가하고, 예제에서 public Text scoreText 와 같이 나와있다면 -> public TextMeshProUGUI scoreText 로 수정한다면 문제없이 사용 가능합니다.

Unity 2022.08.19