유니티 팩토리패턴에 대해 알아보자! #Factory 패턴유니티 팩토리 패턴에 대해서 #UML 작성해보기팩토리 패턴은 객체 생성을 담당하는 팩토리 클래스를 도입하여 객체 생성 로직을 캡슐화하는 디자인 패턴입니다. 팩토리 패턴을 사용하면 객체wlsdn629.tistory.com바로 저번 포스팅에 팩토리패턴에 대해서 글을 써봤습니다.오늘은 저번 시간에 이어 조금 더 나아간 추상 팩토리에 대해서 알아보겠습니다. 기본 팩토리 패턴과 추상 팩토리 패턴의 차이기본 팩토리 패턴(Factory Method)과 추상 팩토리 패턴(Abstract Factory)은 모두 객체 생성과 관련된 디자인 패턴이지만, 사용하는 방식과 목적에서 차이가 있습니다. 각각의 패턴은 객체를 생성하는 역할을 담당하지만, 추상화의 수준과 용도가..
유니티 팩토리 패턴에 대해서 #UML 작성해보기팩토리 패턴은 객체 생성을 담당하는 팩토리 클래스를 도입하여 객체 생성 로직을 캡슐화하는 디자인 패턴입니다. 팩토리 패턴을 사용하면 객체를 생성하는 코드를 분리하여 유연성을 높이고wlsdn629.tistory.com예전에 팩토리패턴에 대해 작성했었습니다. 따라서 팩토리 패턴의 정의에 대해서는 언급하지는 않겠습니다.제가 학교 팀플에서 2D 로그라이크 장르의 게임을 만들고 있는데, 거기에 사용할 만한 Enemy Factory를 한 번 제작해보겠습니다.IEnemy 인터페이스 정의public interface IEnemy{ void Spawn();}먼저, 모든 Enemy 클래스가 구현할 IEnemy 인터페이스를 정의합니다. 각 Enemy는 Spawn이라는 메..
두고두고 써먹는 싱글톤(SingleTon) 코드싱글톤 패턴이란? Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 게임 내wlsdn629.tistory.com예전에도 싱글톤관련해서 블로그 포스팅을 작성한 적이 있습니다. 이번시간에는 싱글톤 패턴의 종류에는 무엇이 있는지 한 번 알아보겠습니다.기본 싱글톤 패턴 (No MonoBehaviour)public class GameManager{ private static GameManager instance; public static GameManager Instance { get { ..
안녕하세요, 이번에 외주팀을 꾸리게 되어 인사차 포스팅하게 되었습니다. 예전부터 외주 일을 조금씩 맡아서 하고 있었는데, 전문적인 팀을 꾸려서 더 나은 서비스를 제공해보는 것은 어떨까? 하는 마음으로 오픈하게 되었습니다. 저희 팀은 저의 블로그를 걸고 정말 확실한 서비스, 확실한 퀄리티, 확실한 가격으로 고객분들에게 최상의 서비스를 제공하고자 마음을 먹으며 시작한 만큼 정말 어느 팀 보다 만족하리라 장담합니다. 저희 팀은 다음 4가지 솔루션을 제공해드립니다.3D 모델링 / 배경 모델링 / 월드 제작# 3D 모델링 부터 월드 제작, 라이팅까지 한번에!# 컨셉아트가 없어도 괜찮습니다 레퍼런스도 찾아드려요!# 성능을 고려한 최적화까지# 유니티에 적합한 모델링, 프리팹 제작부터 패키지 전달까지!PC / 모바일 ..
Network Behaviour란?Network Behaviour 줄여서 NB는 Unity의 MonoBehaviour를 상속받아서 사용됩니다.그렇기에 유니티 MB의 함수들을 모두 사용할 수 있습니다. NB는 네트워크 기능을 통합한 클래스이며 NetworkObject와 연계되어 Network State 관리, RPC, Network Property 관리 등을 지원합니다. 주요 기능Runner 속성을 사용가능하게 해준다, Network Runner에 대한 참조를 제공합니다Network Object에 대한 참조를 제공합니다[Networked] Property를 관리 가능하게 해줍니다RPC 관리를 가능하게 해줍니다콜백함수를 사용할 수 있게 해줍니다, Spawend(), Despawned(), FixedUpdat..
Network Object란?Network Object는 Game Session안에서 단일 Network 객체를 나타냅니다.Network Object 줄여서 NO는 Scene이 로드되거나 Spawning함수를 통해 만들 수 있습니다. NO는 Game Session안에서 고유한 Network ID를 가지게 되는데, 이 ID는 Network 상에서 참조할 때 혹은 참조될 때 사용할 수 있습니다. NetworkRunner.TryFindObject() 메서드를 이용하여 Network Id로 Network Object를 찾아낼 수 있습니다.Network Object를 생성하는 방법Network Object를 생성하는 방식에는 2가지가 있습니다.Runner.Spawn()Scene에 미리 NO를 배치해놓기NO를 생성..
NetworkRunner란?Network Runner는 네트워크 시스템의 중심이 되는 컴포넌트입니다. Network Runner는 다음과 같은 핵심 역할을 합니다.Network Peer 관리SimulationBehaviour/INetworkCallbacks을 관리Game Session / (Join/Create) Room 관리Tick 관리Player / PlayerRef 관리Network Peer 관리Network Runner는 각 Peer를 관리한다고 해서 Scene Hierachy에 각 클라이언트마다 생겨나지는 않습니다. 클라이언트는 자신의 인스턴스에서 Network Runner를 생성하기 때문에 Scene에는 본인 자신꺼 하나의 Network Runner만이 존재합니다. 해당 Network Ru..
gameObject.activeSelf란? 해당 GameObject가 현재 활성 상태인지 여부를 확인할 수 있는 프로퍼티입니다. activeSelf는 해당 GameObject 자신이 활성화(active)되어 있는지 여부를 나타내지만 부모 GameObject의 활성화 여부에는 영향을 받지 않습니다. 즉, 부모가 비활성화되더라도 자식 GameObject가 활성화되어 있다면 activeSelf는 여전히 true일 수 있습니다. GameObject가 실제로 장면에서 활성화되어 있는지 여부는 gameObject.activeInHierarchy를 사용하여 확인할 수 있습니다.
Canvas 컴포넌트를 보면 가끔 Vertex Color Always In Gamma경고를 보실 수 있습니다.옵션을 활성화하지 않으면 감마 색상 공간에서 선형 색상 공간으로 변환이 일어나지 않아, UI 쉐이더에서 색상 정확도가 떨어질 수 있다는 경고입니다. 색상의 정확도가 중요한 UI를 만들 때, 이 옵션을 활성화하는 것이 권장된다고 합니다. 한 마디로 해당 옵션을 활성화하면 Gamma Space에서 Linear Space로 변환이 이루어진다고 합니다.
패턴 매칭이란?패턴 매칭(Pattern Matching)은 변수나 객체의 데이터 형식, 구조, 값을 검사하고 조건을 만족할 경우 특정 동작을 수행하는 방법입니다. 패턴 매칭을 사용하면 객체나 값이 특정 조건에 맞는지 쉽게 확인할 수 있습니다. 패턴 매칭은 주로 if문이나 switch문에서 많이 사용됩니다. Property Pattern이란?Property Pattern은 C# 8.0에서 도입된 패턴 매칭의 한 종류로, 객체의 속성(Property)이나 필드(Field)가 특정 조건을 만족하는지 확인하는 데 사용됩니다. 객체의 속성 값이 null인지 아닌지, 특정 값인지를 쉽게 검사할 수 있습니다. 다음은 예제 코드입니다.private void UpdateCrownPos(){ // TreasureU..
나는 문뜩 궁금해졌다. SRP Batch는 같은 Shader를 공유하는 메테리얼을 사용하면 드로우콜 비용이 줄어든다는 것 알게 된 이후 그렇다면 왜 굳이 Texture Altas를 사용하는 것인지? 너무 궁금해졌다. 왜냐하면 어차피 같은 Shader를 사용하면 다른 메테리얼 사용해도 SRP Batch덕분에 드로우콜 비용이 줄어드니깐 Texture Atlas를 사용해서 굳이 메테리얼을 하나로 만들어서 사용할 필요가 있을까? 야이 바보야 메테리얼 하나당 드로우콜 하나가 발생하는거잖아! 어느 정도 맞는말이다. Draw Call이란 것은 DP Call + Render State인데 DP Call은 무시하고 다른 메테리얼을 사용한다는 것은 다른 Render State를 사용한다는 것이므로, 같은 Shader를 사..
TMI : Texture Baker는 자식으로 Mesh Baker 컴포넌트를 가지고 있는데요, Baker컴포넌트를 통해 새롭게 만들어진 Mesh의 트라이들은 소스 텍스처 대신 새롭게 생성된 아틀라스 텍스처를 참고해야 하도록 UV를 수정해야하기 때문입니다.요약하면, 메시를 베이킹할 때 UV를 변환하여 결합된 메시가 소스 메시와 동일하게 보이도록 해야 합니다.Texture Baker컴포넌트에는 다양한 옵션들이 존재합니다. 하나씩 차근차근 알아보겠습니다. MB3_Texture Baker컴포넌트는 여러 개의 메쉬와 텍스처를 결합하여 하나의 텍스처 아틀라스(혹은 다중 텍스처 아틀라스 )로 만드는 기능을 제공합니다. Texture Baker 컴포넌트를 사용시 지침은 다음과 같습니다.좋은 결과를 위해 같은 셰이더를..
이 글은 광고 아닙니다 X 홍보입니다 O (돈 안 받고 적는 거예요!) (이런 활동이 처음이라 넘 재밌었고 모든 사람이 알았음 하는 마음에 적어봐요~) 어 뭐야 그럼 당신 어떻게 이미지 컨설팅받을 수 있던 거야? 이렇게 물어보실 수 있으시겠지만,학교 동아리(AKO)에서 진행하는 활동덕에 이미지 컨설팅을 무료로 받을 수 있었습니다(뭐 동아리비에 포함되어 있겠죠).저는 사다리 타기를 통해 대표로 뽑혀 운이 좋게 이미지 컨설팅 모델이 되어 더 자세히 설명도 들을 수 있었습니다! 개발자 여러분들 개발 포스팅 보며 개발하는 것도 좋지만, 가끔 이런 글도 보시면서 자기 자신을 가꿔보시는 건 어떠신가요? 모든 내용을 담을 수 없기에 일부분만 가져왔습니다. 또한 중요한 내용은 불가피하게 모자이크 처리 되었습니다. 양..
코드를 최적화하려면 여러 가지 기술을 사용해야 합니다. 그중 하나가 인라인화(inlining)입니다. 인라인화는 간단하게 말해, 메서드 호출을 제거하고 해당 메서드의 코드를 호출 위치에 직접 삽입하는 최적화 기법입니다. C#에는 인라인화를 강력히 권고하는 속성(Attribute)이 있는데, 바로 MethodImplOptions.AggressiveInlining입니다. 이번 포스팅에서는 MethodImplOptions.AggressiveInlining 속성에 대해 간단하게 알아보겠습니다. MethodImplOptions.AggressiveInlining란?AggressiveInlining은 C#의 MethodImplOptions 열거형(enum)의 값 중 하나입니다. AggressiveInlining 속성..
저는 Mathf.Sign를 Sine함수와 헷갈리는 바람에... 약간 머리가 아팠네요 하하 Sign은 Sine함수가 아닌 Sign(부호)를 나타냅니다. /// /// Returns the sign of f. /// /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Sign(float f) => (double) f >= 0.0 ? 1f : -1f;public static float Sign(float f) => (double) f >= 0.0 ? 1f : -1f; Sign 함수는 값을 받아와서 값이 양수면 1을, 음수면 -1을 돌려줍니다. private float SnapInput(fl..
2024 경기 메타버스 아이디어톤이란?「2024 경기 메타버스 아이디어톤」은 메타버스·XR 분야 기업과제 해결 및 콘텐츠 기획 아이디어 경진대회입니다. 공모주제는 트랙 1과 트랙2로 나뉘었습니다.(트랙1) HD현대사이트솔루션 : 제조업(건설기계)에서 Unity엔진을 활용한 아이디어 기획- 예시 : VR/AR/XR 기반 콘텐츠, AR품질검사, Digital Twin, 정비 메뉴얼, 교육, 마케팅 등- 기술/사업적 측면에서 분석- 제조사 및 고객 관점에서 기대효과(트랙2) 티맥스메타에이아이 : 3D공간을 기반으로 한 서비스 정의 및 컨셉 기획- 자유롭게 서비스의 핵심가치, 타겟 사용자, 페르소나, 수익모델, 홍보방안 등 기획 후 서비스 컨셉에 맞춰 티맥스 자체 툴(프로젝트M)을 이용해 공간 꾸미기- 본 서비..
옵저버 패턴과 유사하다고 짚고 넘어가겠습니다. 이번 포스팅에서는 이벤트 관리 시스템을 제네릭 타입을 사용하여 구현하였습니다.제네릭을 사용함으로써 다양한 타입의 데이터를 유연하게 처리할 수 있으며, 여러 이벤트에 맞는 데이터를 효율적으로 전달하는 방법에 대해 알아보겠습니다.제네릭을 사용한 EventManager 구현public class EventArgs : EventArgs{ public T Data { get; } public EventArgs(T data) { Data = data; }}EventArgs는 제네릭 타입을 사용하여 데이터를 담을 수 있습니다. 이벤트가 발생할 때, 특정 타입의 데이터를 전달할 수 있도록 합니다. EventArgs를 상속받는 이유는 .NE..
시네머신을 이용하면 코딩 한 줄 없이 다양한 상황을 쉽게 연출할 수 있습니다. 시네머신은 종류도 많고 Extenstion 종류도 많기에 이번 포스팅에서는 간단하게 Dolly Track, Dolly Cart, Virtual Camera, Blend List Camera 4가지 종류에 대해서만 말해보고자 합니다.Virtual Camera를 활영한 기법들ChinemachineVirtualCamera컴포넌트에는 다양한 프로퍼티 및 옵션이 존재합니다. 하나씩 표로 살펴보겠습니다. 속성명 설명 Status카메라 상태를 나타냅니다. 예시로 "Live"는 현재 이 가상 카메라가 활성 상태임을 의미합니다.Game Window Guides게임 창에서 카메라의 시각적 가이드라인을 표시할지 여부를 선택할 수 있습니다.Sa..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.