반응형

게임 개발 62

[디자인패턴] 6. 유니티에서 옵저버패턴

오늘 유니티에서 적용해볼 패턴은 '옵저버 패턴'입니다. 옵저버 패턴의 정의는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이가고 자동으로 갱신되는 방식으로 일대다 의존성을 가집니다. 위의 정의를 유의하면서 게임에서 전투를 통한 체력 표시를 구현해봅시다! 구현하기에 앞서 오늘 패턴의 또다른 중요한 원칙 '느슨한 결합'에 대해서 먼저 정리해봅시다. 옵저버 패턴에서는 주제(Subject)와 옵저버(Observer)가 느슨하게 결합되어있는 객체 디자인 원칙을 제공합니다. 특징 1. 주제가 옵저버에 대해서 아는것은 옵저버가 특정 인터페이스를 구현한다는 것뿐입니다. 2. 옵저버는 언제든지 새로 추가할수있습니다. 3. 새로운 형식의 옵저버를 추가하려고 할때도 주제를 전혀 변경할 필요가 없습니다. ..

[디자인패턴] 5. 유니티에서 추상팩토리

지난시간에는 팩토리메소드 패턴을 유니티에서 표현해봤습니다. 다음은 추상팩토리를 정리해보고자 합니다. 추상 팩토리의 특징은 인터페이스를 이용하여 서로 관련있는, 의존하는 객체를 구상클래스를 지정하지않고 생성하는 방식입니다. 팩토리메소드 패턴과 두드러진 차이점은 바로 구상클래스의 유무입니다. 그외의 특징이 있다면 게임을 예로들어서 '무기', '헬멧', '옷' 등 몬스터의 장비를 세팅하는 등의 규격이 정해진 어떠한 객체를 꾸며줘서 객체의 정의를 결정하는 시스템에 어울립니다. 2021.07.21 - [디자인패턴 정리] - [디자인패턴]4. 유니티에서 팩토리 메소드 패턴 [디자인패턴]4. 유니티에서 팩토리 메소드 패턴 유니티에서 객체를 생성하는 일이 많습니다. 몬스터, 장애물, 유저캐릭터 등등... 오늘 정리할 ..

[유니티 C#] SafeArea 상,하,좌,우 4방향 각자 대응

무더운 여름입니다. 이게 날씨인가 싶지만 개발은 계속됩니다. 최근에 UI디자이너분의 요청에 따라 기존에 사용하던 SafeArea를 개량했는데 의외로 쓸만하다는 생각이 들어서 이렇게 기록해 놓습니다. 제 블로그에서도 소개드렸던 에셋스토어에서 무료로 배포하는 SafeArea 에셋의 스크립트를 개조한 것 입니다. 기존에 사용하던 SafeArea는 X축, Y축만 대응이 가능했다고 한다면, 이번에 개량하게된 버전은 Topn Bottom, Left, Right 4방향을 조절할 수 있게 되었습니다. using UnityEngine; public class SafeArea : MonoBehaviour { public enum SimDevice { None, iPhoneX, iPhoneXsMax, Pixel3XL_LSL..

게임 개발/Unity 2021.07.24

[디자인패턴]4. 유니티에서 팩토리 메소드 패턴

유니티에서 객체를 생성하는 일이 많습니다. 몬스터, 장애물, 유저캐릭터 등등... 오늘 정리할 패턴은 위와같이 객체를 생성하는 것에 있어서 확장성이 높고 의존성을 줄일 수 있는 패턴 '팩토리 메소드 패턴'입니다. 팩토리 메소드 패턴의 가장 큰 핵심은 어떠한 객체를 생산하는 생산자(Creator)와 어떠한 객체를 생산할지 결정하는 구상 생산자(ConcreteCreator)의 분리 입니다. 게임으로 예를 들면 전체 몬스터를 스폰해주는 어떠한 클래스가 생산자(Creator)입니다. 모든 몬스터는 이 클래스에서 생산이 됩니다. 그리고 생산될 몬스터를 결정해주는 클래스가 구상 생산자(ConcreteCreator)입니다. 고블린을 생산할지, 해골을 생산할지를 정해주는 클래스입니다. 우선 생산자 입니다. 생산자의 특..

[유니티 C#] UI Animation State 이름 중복 사용

최근에 UI 애니메이션 관련해서 재밌는 팁을 알게되서 달려왔습니다! UI 애니메이션의 중복 활용이라 적었는데 무엇이냐면 유니티 애니메이션을 하면서 원하는 애니메이션으로 변경하거나 실행해야할때 각 상태에 transition을 연결하고 파라미터 값을 매겨 일종의 유한상태 머신을 만드는 형태로만 사용해왔습니다. 하지만 이번에 알아낸건 스크립트상에서 애니메이션을 실행할때 state이름을 매개변수로 받아 실행하며 그 state이름을 똑같이 작성하게되면 UI상에 중복되는 시점에 다른 애니메이션을 실행시킬수있다는 것을 알았습니다. 예시를 들자면 일반 팝업 연출과 아래에서 슬라이드해서 올라오는 팝업 연출이 있습니다. 그리고 해당 애니메이터를 제어할 스크립트를 살펴봅시다. // 콜백 매개변수를 위한 델리게이트 publi..

게임 개발/Unity 2021.07.11

[디자인패턴] 03. 유니티에서의 싱글톤(Singleton) 패턴

지난 수요일에 친구들과 디자인패턴에 대해 스터디를 하면서 제 스스로로 잘 알고 사용하고 있으면서도 잘 모르겠는 아리송한 싱글톤 패턴에 대해서 다시 한번 정리하고자 합니다. 저는 예전에 게임을 구현하면서 유니티에서 C#으로 싱글톤으로 어떻게 구현하는지 찾아보면 원하는 스크립트에 static 멤버변수 instance를 선언하여 초기화한 후 다른 씬으로 넘어갈때 계속 유지할수있게 어떤 처리를 해서 계속 사용하는 방법을 자주 볼 수 있었습니다. //// 구글링해서 나오는 대부분의 유니티 싱글톤 느낌 public class GameManager : MonoBehaviour { // instance 멤버변수는 private하게 선언 private static GameManager instance = null; pr..

[유니티 C#] PhotonNetwork 기본 콜백함수 찍먹하기

포톤네트워크를 사용해 함수를 구현하시면 편리하게도 서버에 입장하고, 로비, 룸에 입장할때 호출되는 콜백 함수들이 있습니다. 오늘은 서버에 접속해서 방에 들어가기까지 대략적인 파악정도만을 위해 작성하고 추후에 디테일한 UI 구성까지 함께 파보겠습니다! 인게임에 들어가기전에 아웃게임에서 크게 챕터를 나누자면 접속, 로비, 룸 이렇게 나뉘는 것 같습니다. 1. 서버 연결 및 연결해제 파트 public void OnConnect() { // 서버 접속 함수 PhotonNetwork.ConnectUsingSettings(); } public void OnDisconnect() { // 접속 종료 함수 PhotonNetwork.Disconnect(); } public override void OnConnectedT..

게임 개발/Unity 2021.06.09

유니티 Admob mediation adapter 적용시 빌드에러

최근 개발중인 프로젝트에 애드몹 미디에이션을 적용하면서 안드로이드 빌드 에러가 발생하여 리서치한 결과 사용하고있는 유니티 버전의 안드로이드 build.gradle 버전이 낮아서 발생한다는 결론이 나왔습니다. 그래서 해당 유니티 버전, 저의 경우에는 2019.4.19f1을 사용하는데 2019.4.19f1/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/baseProjectTemplate.gradle을 확인하시면 아래와 같이 나옵니다. 처음에는 왼쪽 이미지처럼 나와있는 classpath를 오른쪽처럼 3.4.3으로 변경한 뒤에 빌드를 시도해보시면 문제없이 잘되는것을 확인할 수 있습니다.

게임 개발/Unity 2021.02.14

[유니티 C#] Position으로 SortingLayer 조절 - 건물 뒤에 숨기

최근에 진행하는 프로젝트에서 플레이어 캐릭터가 돌아다니는 상황에서 건물 오브젝트 혹은 다른 오브젝트과 붙어있을때 랜더링 순서가 맞지않아 고민해본 결과 해당 오브젝트의 position.y값으로 레이어 order값을 변경시켜 건물의 앞에서 앞으로 뒤에선 뒤로 랜더링되도록 구현하였습니다. using System.Collections; using System.Collections.Generic; using UnityEngine; // SpriteRenderer 필수 [RequireComponent(typeof(SpriteRenderer))] public class ObjectLayerSetter : MonoBehaviour { private SpriteRenderer spriteRenderer = null; p..

게임 개발/Unity 2020.12.06

[유니티 C#] 에디터 OnInspectorGUI()후 저장

프로그래머가 아닌 팀원과 협업하기위해 에디터 제너레이터를 만들면서 겪었던 문제를 해결하면서 블로그에 남깁니다. 게임에 등장하는 맵을 꾸미기위한 에디터 제너레이터를 구현했습니다. 아래와같이 인스펙터에 Enum배열을 조절하고 Generate Image 버튼을 누르면 해당 Enum에 맞는 이미지로 맵이 꾸며지는 클래스입니다. // 인스펙터에서 맵을 꾸밀 수 있도록 구현 // 인스펙터에서 제어하기위한 enum public enum TILE { FLOOR_01, FLOOR_02, } // 9개의 블럭이미지를 가지고있는 MapBlock 클래스입니다. public class MapBlock : MonoBehaviour { [SerializeField] private SpriteRenderer[] spriteRende..

게임 개발/Unity 2020.11.21
반응형