1. Abstract, Virtual Method들을 활용한 상속 Class 들의 호출 우선순위

 - override

 - Java와는 다르게 C++, C#에서는 부모 class의 메소드들이 우선순위이고, virtual로 명시해두어야 함

 

2. Singleton Pattern (Static 함수를 활용하여 Component간의 Data 주고 받을 때)

 - Device IO, Manager Script 에 주로 사용 됨

 - onDestroy, Scene 전환 시에도 사용 됨 (전환을 시키는 script는 main camera에 두는 것이 문제 방지에 좋음)

 - Additive Loading이라는 Scene 전환 메소드: 기존의 scene에 새로운 scene을 추가하는 방식

 

3. Strategy Pattern - interface를 사용하여 알고리즘이 서로 교환 가능하도록 하는 패턴

- interface: 기능에 대한 선언 (구현과의 분리), 여러가지 기능을 사용하기 위한 단일 통로

- 같은 기능 다양한 종류를 제작 할 떄 유용

 

4. Simple Factory Pattern

- Factory: 객체 생성을 처리하는  클래스 (Simple factory: 객체 생성 전담 클래스)

    '이러이러한 메소드를 쓸 것이다.' 인터페이스에 선언을 해놓고, 가져다가 반드시 선언된 그대로 모두 구현하면 되는게 인터페이스이고,

    이러이러한 메소드가 있지만 가져다 쓰거나 오버라이드 하거나, abstract가 붙은 메소드는 반드시 구현하면 되는게 abstract class이다.

      (출처: https://marobiana.tistory.com/58 [Take Action])

- Instantiate()함수 : 게임 실행 중에 게임 오브젝트를 생성하는 함수 - Instantiate(GameObject original ,Vector3 position ,Quaternion rotation)

 

5. Factory Method Pattern

- 객체를 만드는 역할을 하는 Method : 예를 들어 어떤 종류의 객체를 몇개 만들어 줄것인지 정의를 해줌 -> 수정할 때 편리

- UseFactoryMethod: API, SDK 함수를 쓰듯이 사용, 함수를 불러서 쓸수있도록 짜여져 있으면 UseFactoryMethod에서 사용하도록 함

- 상황에 따라 수정 적용이 편리하도록 코드 작성

 

6. Abstract Factory Pattern

- Client에 연곤된 객체들의 패밀리를 반환 / 관련성 있는 여러 종류의 객체를 특정 그룹으로 묶어 한번에 일관된 방식으로 생성, 교체

- But, 인구는 인구 끼리 건물은 건물끼리 모으면 종족이 늘어날경우 수정해야할 부분이 많을 수 있다. -> 종족으로 그룹을 추가로 만들어 줌

- 그룹을 어떻게 만들지 결정하는 것도 중요함 듯! -> 최대한 main함수에서는 수정을 안하는 방향으로

- Zerg / Protos / Terran 스타를 만든다고 생각하면 될 듯!

 

7. prototype Pattern (동적 클래스 생성)

- Prototype pattern 은 object 생성에 높은 비용이 드는데 (Prefeb 등) 수 많은 생성 요청을 하는 경우, 또는 비슷한 object를 지속적으로 생성해야 할 때 유용하게 사용

- Marine m = new Marine();  =>  Marine m2 = (Marine)m.Clone(); 한 후에 속성을 변경할 수 있음.

 

8. Flyweight Pattern

- 모든 객체의 데이터 값이 같아서 공유할 수 있는 데이터를 모은다 / 나머지 데이터는 인스턴스 별로 값이 다른 외부 상태에 해당

- 한개의 고유 상태를 다른 객체에 공유하여 메모리 사용량을 줄임 (C++의 Pointer 개념)

- Factory method pattern 이용됨 (이전에 생성한 객체가 있는지 탐색하는 방법이 필요함!!! -> Object pool pattern : Dictionary 자료구조로 구현)

 

9. Object pool Pattern: 재사용 가능한 객체들을 모아 놓은 객체 풀 클래스; 자신이 사용 중인지 여부를 알 수 있는 방법을 제공함 (사용 중, 사용 안 함에 대한 Status 정보 저장 및 반환!), but 여러 곳에서 동시에 재사용하게 하진 않고 한번에 한 곳에서만 사용

 

10. Builder: 복잡한 객체의 단계별 생성에 중점을 두고 있는 패턴 / 부분부분을 먼저 생성 후 마지막 단계에서 생성한 제품을 반환

 

11. State Pattern: !isJumping 같이 현재 진행 중인 상태를 check하는 if문을 작성, but 문제 있음 -> 상태를 별도의 클래스로 캡슐화 하여 각 상태를 클래스를 이용하여 표현함 (ex. 실험의 단계 별 State를 지정해 줄 때)  <중요!!>

- Statemanager를 두고, request() 하는 방식으로 사용

- switch 문으로 하면 깔끔하게 정리됨

-  Action별로 class로 나누어서 변수를 공유하는 것을 최소화하여 유지 보슈에 용이하게 함. https://docs.google.com/document/d/1y_gtycMNrv8yAqhfS1zZU4zArrrc2-O6Wt-aaib65wg/edit

 

25.StateExB2

State.cs ConcreteStateStand.cs ConcreteStateJump.cs ConcreteStateDown.cs ConcreteStateAttack.cs ConcreteStateSkill.cs MyAction8.cs

docs.google.com

 

12. Observer Pattern: 1:N의존성 정의, Subject & Observer Interface로 Subject의 상태를 Observer에 전달

- OnNotify() 메소드로 각 observer에 전달 (foreach 문 응용)

- delegate() Function으로 같은 Patter을 개발할 수 있음. (https://shhyc1001.tistory.com/120)

- NotiHandler _notiHandler;에 Observer들을 등록해주고 쉽게 호출 가능함 / 등록하면 매개변수로 알아서 모두 호출해줌

 

13. Adapter Pattern: 인터페이스 (메소드 이름)가 달라서 코드가 복잡해지는 경우 중간에서 변환해주는 역할을 하는 Pattern / opensource 코드를 가져와서 기존에 있는 환경에서 사용할 때 주로 사용되는 패턴

- 기존 시스템에 비슷한 기능을 하지만 메소드 이름명이 다를 때 유용함, 새로운 부분or 유형이 추가된다면 수정 부분 최소화하여 오류에 대처 빨리 할 수 있음

 

14. Command Pattern: 명령 패턴은 메서드 호출을 실체화, 객체로 감싼 것

- 디커플링으로 코드가 유연 (ex. 입력키변경, 실행취소, 재실행)

- 사용자가 자신만의 입력키를 만들 때 (사용자 정의 키)

- Transform, key 등을 객체로 만들어서 Stack으로 저장

* TIP: 빈 객체를 만들어서 좌표 값으로 설정해 둘 수 있음!!

'Programming > Programming Skills' 카테고리의 다른 글

Git / Github 명령어  (0) 2022.07.17

본 글은 Valem(https://www.youtube.com/watch?v=sKQOlqNe_WY&feature=youtu.be)의 영상을 참고하여 개발 중에 나온 이슈들을 해결한 내용들을 포함해 작성하였습니다.

우선 Unity 프로젝트 생성 후,

1. File -> Build Setting에서 Player Settings 설정에서 Virtual Reality Supported 설정을 활성화 해줍니다.

XR Setting - Oculus를 최상위로 / 여러 플렛폼에서 구동하려면 OpenVR로 설정

2. Asset 폴더에 OculusIntegration_1.38.0을 import합니다. 1.38 버전이후에 출시된 버젼은 오류가 있어서 옆 링크에서 1.38.0을 받아서 실행하는 것을 추천합니다. (https://developer.oculus.com/downloads/package/unity-integration/1.38.0/)

3. 기존의 Camera를 지우고, OVRPlayerController를 불러오고, 하위 OVRCameraRig에서 Tracking의 Origin Type을 Floor Level로 설정해줍니다.

OVRCamera를 불러온 뒤, Floor Level로 설정

4. OVRPlayerController에서는 카메와 Avatar의 움직임을 연결하기 위해 Character Camera Constraint를 추가하고 CameraRig를 OVR로 설정해 줍니다.

Camera Rig를 OVRCameraRig(OVRCameraRig)로 설정

5. 아래 구조처럼 LocalAvatar, AvatarGrabberLeft & Right를 추가해주고 실행하면 손, 움직임등이 작동합니다.

6. 손의 자연스러운 움직임 (끊김 방지)를 위해 Time에서 1/90으로 설정해줘서 Frame조정을 해줍니다. (Default값: 0.2)

추가적으로 Custom Hand를 사용하기 위해서는 (https://www.youtube.com/watch?v=rnOR1OANIAU) 해당 영상을 참고! Local Avatar는 단순한 기능밖에 없기 때문에 복잡하거나 다양한 Interaction을 위해서는 Custom hand를 사용하는것이 좋습니다.

+ Recent posts