본문 바로가기

Unity41

[C#/Unity][디자인패턴] 상태 패턴(State Pattern) 1. 상태 패턴이란? - 객체가 상태에 따라 행위를 다르게 할 때, 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아니라 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임하는 디자인 패턴. - 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴. - 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의한다. - 상태란, 객체가 가질 수 있는 어떤 조건이나 상황을 의미한다. 2. 상태 패턴을 사용하는 경우 - 상태 전이를 위한 로직이 지나치게 복잡한 경우 - 현재 상태에 따라 다르게 행동하는 객체가 있는 경우 - 상태들의 수가 많고, 상태별로 코드가 자주 변경되는 경우 3. 상태 패.. 2023. 12. 27.
[C#/Unity][디자인패턴] 옵저버 패턴(Observer Pattern) 1. 옵저버 패턴이란? - 하나의 관찰 대상(객체)를 여러 개의 관찰자(옵저버)들이 관찰하고(일대다 구조), 객체의 상태 변화시 객체가 직접 옵저버들에게 상태 변화를 통지하고, 옵저버들은 해당 통지를 받는 구독 메커니즘을 가짐. - 옵저버(관찰자)들이 관찰하고 있는 대상자의 상태 변화가 있을 때마다, 대상자는 목록의 각 관찰자들에게 직접 알리고 관찰자들은 알림을 받아 조치를 취하는 행동 패턴. - 객체의 상태 변화를 관찰하는 관찰자(옵저버)들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴. - public/subscribe (발행/구독) 모델로도 알려져 있음. - 관찰자들은 수동적으로 객체에게 정보를 전달 받기만을 기다린.. 2023. 12. 27.
[개발더미][Unity] 유니티 GPU 버그 - D3D11 swapchain~ 개발 중 갑자기 아래와 같은 문구가 뜨면서 유니티가 튕겼다. 그래서 이리저리 서치해서 해결방안을 찾아냈다! 💡해결방안 디스플레이 설정 > 그래픽 > 유니티 아이콘 클릭 > 옵션 클릭 > Windows가 결정하도록 허용 -> 고성능으로 변경 cf) 이 방법으로도 안 될 경우 아래 사이트를 참조하길 바란다. Bug - Failed to present D3D11 swapchain due to device reset/removed. List of Solutions For reference, the bug report is IN-41214. So this unrecoverable error can happen for many but essentially your graphic card resets because .. 2023. 12. 26.
[C#/Unity][디자인패턴] 메멘토 패턴(Memento Pattern) 1. 메멘토 패턴이란? - 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 패턴. - 객체의 상태 정보를 저장하고 사용자의 필요에 의해 원하는 시점의 데이터를 복원할 수 있는 패턴. - 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법. 2. 메멘토 패턴을 사용하는 경우 - 어떤 객체의 상태를 변경하고, 이 변경 내용을 이후에 취소하거나 이전 상태로 복원하려고 할 때 사용 - 객체의 field, getter, setter들을 직접 접근하는 것이 해당 객체의 캡슐화를 위반할 때 사용 3. 메멘토 패턴의 장점 - 객체의 모든 정보를 외부로 노출시키지 않고 캡슐화를 지킬 수 있다. - 캡슐화를 위반하지 않고 객체의 상태 스냅샷들을 생성할 수 있다. - 코드를 단순화 시킬 수 있다. 4. 메멘토 패.. 2023. 12. 21.
[C#/Unity][디자인패턴] 중재자 패턴(Mediator Pattern) 1. 중재자 패턴이란? - 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 하는 패턴. - 소프트웨어 공학에서 어떻게 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의 - 객체간의 상호작용을 캡슐화하는 디자인 패턴 - 중재자라는 객체 안에서 서로 다른 객체들을 캡슐화하여 객체들이 더 이상 직접적으로 상호작용하지 않고 중재자를 통해서만 커뮤니케이션하도록 함. - 객체 간의 혼란스러운 의존 관계들을 줄일 수 있는 패턴 2. 중재자 패턴을 사용하는 경우 - 객체 간의 많은 의존관계를 가지거나 상호작용이 복잡해질 때 사용. - 일부 클래스들이 다른 클래스들과 단단하게 결합하여 변경하기 어려울 대 사용. - 타 컴포넌트들에 너무 의존하여 다른 프로그램에서 컴포넌트를 재사용할 수 없는 경우 .. 2023. 12. 20.
[C#/Unity][디자인패턴] 반복자 패턴(Iterator Pattern) 1. 반복자 패턴이란? - 일련의 데이터 집합에 대해 순차적인 접근(순회)을 지원하는 패턴. - 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하는 패턴. - 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴. - 컬렉션의 요소들을 순회하는 패턴. 2. 반복자 패턴을 사용하는 경우 - 해시나 트리구조와 같이 저장순서가 정해지지 않고 적재된 데이터들을 순회하는 방법을 정하는 경우 - 컬렉션에 상관없이 객체 접근 순회 방식을 통일하고자 할 경우 - 컬렉션을 순회하는 다양한 방법을 지원하고 싶은 경우 - 컬렉션의 복잡한 내부 구조를 클라이언트로부터 숨기고 싶은 경우(편의 + 보안) - 데이터 저장 컬렉션 종류가 변경 가능.. 2023. 12. 16.
[C#/Unity][디자인패턴] 인터프리터 패턴(Interpreter Pattern) 1. 인터프리터 패턴이란? - 자주 등장하는 문법을 별개의 간단한 언어로 정의하고 재사용하는 패턴. - Expression이라는 추상 클래스를 만들어 사용하는 경우가 많음. - 반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장할 수 있음. - 트리구조로 인해 컴포지트 패턴과 유사한 형태를 띈다. 2. 인터프리터 패턴을 사용하는 경우 - 특정 언어 또는 문법이 반복되서 사용되는 경우 3. 인터프리터 패턴의 장점 1) 캡슐화 : 문법과 해석을 기본 로직에서 분리하여 별도의 클래스로 캡슐화되므로 모듈화되어 유지보수가 쉬워진다. 2) 쉬운 확장 : Expression 클래스에서 파생된 새로운 구현 클래스만 추가하면 DSL을 쉽게 확장할 수 있다. 3) 가독성 : 문법과 규칙을 계층구조를 이용해 명시적으로 .. 2023. 12. 12.
[C#/Unity][디자인패턴] 커맨드 패턴(Command Pattern) 1. 커맨드 패턴이란? - 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴. - 객체의 행위(메서드)를 클래스로 만들어 캡슐화하는 패턴. - 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 패턴. - 요청의 실행을 지연하거나 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업도 지원한다. - 요청을 객체의 형태로 캡슐화하여 나중에 이용할 수 있도록 메서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 해주는 패턴. 2. 커맨드 패턴을 사용하는 경우 - 요청이 서로 다른 사용자, 시간 또는 프로젝트에 따라 달라질 수 있을 경우 - 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고 싶은 .. 2023. 12. 7.
[C#/Unity][디자인패턴] 브릿지 패턴(Bridge Pattern) 1. 브릿지 패턴이란? - 클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 한다. - 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. - 객체의 확장성을 향상시키기 위한 패턴. 2. 브릿지 패턴을 사용하는 경우 - 클래스의 내용과 클래스에서 처리하는 일이 자주 변화하는 경우 - 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가 해야하는 경우 - 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인 클래스가 추가 규칙을 추가하고 싶은 경우 - 객체에 대한 참조가 있는 추상 클래스가 있고 각 구체적인 클래스에서 정의될 추상 메서드가 있는 경우 3. 브릿지 패턴의 장점 - 새로운 인터페이스를 정의하여 기존 프로그램의 변경없이 기능을 확장할.. 2023. 12. 5.
[C#/Unity][디자인패턴] 프록시 패턴(Proxy Pattern) 1. 프록시 패턴이란? - 어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상 객체에 접근하는 방식을 사용하는 패턴. - 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. - 원래 객체에 대한 접근을 제어할 수 있어, 요청이 들어와 원래 객체에 전달되기 전이나 후에 무언가를 수행할 수 있다. - 대리자로써 작업 수행을 요청하면 처리 후 그 결과를 알려주는 패턴. - 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴. - 상속받은 인터페이스의 클래스 내부에서 같은 인터페이스를 상속받은 인스턴스를 생성하는 패턴.. 2023. 12. 4.
[Unity] 유니티 AirSim 적용(dll 파일 설치) 2023.12.01 기준 1. 유니티 설치 2. airsim 파일 다운 GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Res Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Research - GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Un... github.com 3. 유니티로 airsim 실행 - A.. 2023. 12. 1.
[C#/Unity][디자인패턴] 경량 패턴(Flyweight Pattern) 1. 경량 패턴이란? - 재사용 가능한 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴. - 한 개의 고유 상태를 다른 객체들에서 공유하게 만들어 메모리 사용량을 줄이는 패턴 - 내용이 같은 객체가 이미 있으면 새로 객체를 만들지 않고, 내용이 같은 기존 객체를 공유한다. - 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하며 사용하도록 메모리 사용량을 최소화하는 패턴. - 반복된 데이터에 대해 하드웨어의 부담을 줄여주는 패턴 2. 경량 패턴을 사용하는 경우 - 메모리를 최소한으로 사용해야하는 경우 - 공통적인 인스턴스를 많이 생성하는 로직이 포함된 경우 - 생성된 객체가 오래도록 메모리에 상주하며 사용되는 횟수가 많은 경우 - 어플리케이션에 의해 생성되는 객체의 수가 많아.. 2023. 12. 1.