Unity

Unity) Design Pattern

Todah 2023. 10. 25. 21:08
반응형

 

Design Pattern 이란?

 반복적으로 일어나는 문제에 대해 재사용이 가능한 코드형태를 의미한다.

보통 소프트웨어 구조의 설계와 관련이 많다. 좋은 소프트웨어 설계는 코드를 거의 건드리지 않고도, 적당한 함수 몇 개만 호출하면 원하는 작업을 할 수 있도록 '범용성' 있게 설계한 구조를 말한다. 해당 코드를 얼마나 쉽게 변경할 수 있는지, 얼마나 다양한 방식으로 활용할 수 있는지 여부가 '좋은' 코드 설계를 평가하는 척도가 된다.

 

 하지만 너무 범용성만을 고려하다보면 성능을 저하시킬 수도 있다. 그래서 상황과 목적에 맞는 방식을 적절히 사용하는 것이 중요하다.

 

 

- 명령 패턴 (Command Patterns)

 게임 프로그래밍에서 자주 사용하는 디자인 패턴으로는 명령 패턴(Command Patterns)이 있다. 명령 패턴은 요청 자체를 캡슐화하는 방식으로 서로 다른 클라이언트를 매개변수로 만들고 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원한다.

 

 보통은 키 입력 시 키 커스터마이징을 통해 확장성을 늘리는데 사용한다. 리그오브레전드를 예로 들면, 타겟팅 궁극기 스킬의 경우 Keycode R, GetMouseButtonDown(0)을 차례로 입력하면 스킬이 사용된다. 하지만 Key 설정에 들어가 유저가 즉시시전으로 입력을 바꾸면 Keycode R만 눌러도 현재 마우스 위치에 있는 적에게 스킬을 사용할 수 있다. 이는 키 입력값 요청 자체를 캡슐화시킨 명령 패턴의 대표적인 사례라고 볼 수 있다.

 

 비슷하게 실행 취소/돌아가기 등 직전의 명령으로 돌아갈 때도 사용한다. 명령 입력 시 기본적으로 스택에 후입선출(LIFP) 방식으로 데이터가 들어가기 때문에 이전 상황으로 명령을 취소하여 재실행 할 수 있게 된다.

 

 

- 싱글톤 패턴 (Singleton Patterns)

 게임 프로그래머라면 싱글톤 패턴 (Singleton Patterns)에 대해 익술할 것이다. 싱글톤 역시 디자인 패턴 중에 하나이며 특히, 게임 프로그래밍에서 매우 자주 사용된다. 싱글톤은 해당 클래스의 인스턴스를 생성하고 접근가능하도록 만들어 프로퍼티를 호출 시 생성한 인스턴스를 호출하는 방식을 의미한다.

 

 피격 시 아군에게 데미지를 주는 함수를 호출하여 체력을 감소시킬 때 플레이어 체력 관련 클래스를 인스턴스화하여 데미지를 호출하는 클래스에 넣어 활용하곤 한다. 인스턴스를 static으로 선언하기 때문에 시스템 전역에서 관리되고 단 하나의 클래스에서만 정보가 유지되는 것을 목적으로 한다. 따라서 싱글톤은 게임 매니저, 게임 플레이 시간, 유닛 킬수, 건물 갯수 등 게임 플레이 과정에서 생성되는 전체적인 누적 데이터를 관리하는데 사용된다.

 

 쉽게 말해서 게임에서 특정 스테이지를 클리어하고 다음 스테이지로 넘어갔을때 유지되어야하는 절대적인 데이터들을 관리하는데 사용한다고보면 된다.

 

 

- 유한상태머신 패턴 (FSM, Finite State Machine Patterns)

 게임 개발자라면 FSM 패턴을 이미 한번 씩은 다 사용해봤을 것이다. 유니티에서 제공하는 Animator 프로퍼티는 FSM 패턴을 시각화해서 드래그앤 드롭 만으로 커스터마이징 할 수 있게 만든 것이다. 상태 패턴을 다중으로 처리하지 않고, 이벤트 발생 시 하나 씩 처리해 현재 상태에서 다음 상태로 전이하게 하는 디자인 패턴으로 특정 객체의 상태를 관리하기 위한 패턴으로 이해하면 된다.

 쉽게 말해서 유니티의 캐릭터 Animator 라고 생각하면 된다.

 

 이외에도 팩토리 메서드 패턴, 추상 패턴등 다양한 패턴들이 나와있다. 이 중에서 상황과 목적에 맞는 적절한 패턴을 사용하는 것이 중요하다고 생각한다.

 

 

#참조

https://blog.naver.com/PostView.nhn?blogId=lovesongsing&logNo=222267568708&parentCategoryNo=&categoryNo=21&viewDate=&isShowPopularPosts=true&from=search

 

C# 유니티 게임 제작에 나도 모르게 자주 사용하던 디자인 패턴 - 팩토리 패턴

C#에서 새로운 인스턴스를 생성하기 위해서는 new 예약어를 사용한다. https://docs.microsoft.com/ko-kr/...

blog.naver.com

https://wonjuri.tistory.com/entry/Unity-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B4Strategy-Pattern

 

[Unity] 디자인 패턴 : 전략 패턴(Strategy Pattern)

Unity와 C#을 통한 전략 패턴(Strategy Pattern) 사용 방법에 대해 알아보자. 1. 전략 패턴이란? 행동을 정의하고 캡슐화해서 각각의 행동이 추가될 때 유연하고 독립적으로 변경하여 사용할 수 있게 도

wonjuri.tistory.com

https://refactoring.guru/ko/design-patterns/what-is-pattern

 

디자인 패턴이란?

디자인 패턴이란? 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책입니다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는

refactoring.guru

https://thepathfinder.co.kr/entry/TIL%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EA%B3%BC-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%810704

 

[유니티/C#] 게임 디자인 패턴(Design Pattern)과 리팩토링(Refactoring)

게임 최적화란? 게임 프로그래밍 디자인 패턴을 이해하려면 먼저 좋은 소프트웨어 구조에 대해 알아야 한다. 좋은 소프트웨어 구조는 코드를 거의 건드리지 않고도, 적당한 함수 몇 개만 호출하

thepathfinder.co.kr

반응형

'Unity' 카테고리의 다른 글

Unity) ProBuilder  (0) 2023.10.30
Unity) ML Agent  (0) 2023.10.27
Unity) Prefab  (2) 2023.10.24
Unity) Serializable, SerializeField  (2) 2023.10.23
Unity) Event  (2) 2023.10.20