전체글45 게임 프로그래밍 패턴 : [6] 상태 패턴 유한 상태 기계(FSM) - 가질 수 있는 상태가 한정된다.- 한 번에 한 가지 상태만 될 수 있다.- 입력이나 이벤트가 기계에 전달된다.- 각 상태에는 입력에 따라 다음 상태로 바뀌는 전이(transition)가 있다. FSM 구현 방법1) enum 상태 기계를 구현하는 가장 간단한 방법.상태에 따라 분기함. FSM 구현 방법2) 상태 패턴상태 인터페이스.class PlayerState{public: virtual ~PlayerState(); virtual void HandleInput(Player& player, Input input){} virtual void Update(Player& player){}}; 상태별 클래스class IdleState : public PlayerS.. 공부 잡동사니/디자인 패턴 2024. 9. 10. 게임 프로그래밍 패턴 : [5] 싱글톤 패턴 싱글톤 패턴은 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고,이에 대한 전역적인 접근점을 제공한다. class FileSystem{public: static FileSystem& Instance() { if(instance == nullptr) instance = new FileSystem(); return instance; }private: FileSystem() {} static FileSystem* instance;}; class FileSystem{public: static FileSystem& Instance() { static FileSystem *instance = new FileSystem().. 공부 잡동사니/디자인 패턴 2024. 9. 5. 게임 프로그래밍 패턴 : [4] 프로토타입 패턴 원형이 되는 인스턴스를 사용하여 생성할 객체를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성한다. 예제1) 몬스터 스포너몬스터 종류마다 스포너를 만들면 몬스터의 상속 구조와 스포너의 상속 구조가 같아진다. 이러면 반복되는 코드, 중복이 많아지게 된다. -> 프로토 타입 패턴으로 해결 어떤 객체가 자기와 비슷한 객체를 스폰할 수 있다. 즉 어떤 몬스터 객체든 자신과 비슷한 몬스터 객체를 만드는 원형 객체로 사용할 수 있다. class Monster{public: virtual ~Monster(); virtual Monster* Clone() = 0;};class Ghost : public Monster{public: Ghost(int _health, int _speed) : .. 공부 잡동사니/디자인 패턴 2024. 9. 5. 게임 프로그래밍 패턴 : [3] 관찰자(observer) 패턴 객체 사이의 일대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 업데이트 될 수 있게 한다. 예제1) 업적 달성 게임에서 업적 달성 여부를 체크할 때, 업적은 콘텐츠의 여러 부분과 관련되어있으므로 각 부분에서 업적 달성을 처리하면 여기저기에 업적 관련 코드가 분포되는 형태가 될 수 있다. 예를 들어 다리에서 떨어지는 업적이 있다고 할 때,충돌 검사 코드에 업적을 체크하는 코드를 넣는다면 지저분할 수 있다.. 옵저버 패턴을 구현해보자.Observer 인터페이스를 만들고 통지를 받을 클래스에서 Observer를 구현하면 된다. Observer 인터페이스는 통지를 받았을 때 처리할 함수 OnNotify를 가진다. enum E.. 공부 잡동사니/디자인 패턴 2024. 8. 30. 게임 프로그래밍 패턴 : [2] 경량 패턴 경량 패턴은 어떤 객체의 개수가 너무 많아서 가볍게 만들고 싶을 때 최적화하기 위한 패턴이다. 경량 패턴은 객체 데이터를 두 종류로 나눈다. : 고유 상태(intrinsic state), 외부 상태(extrinsic state)한 개의 고유 상태를 다른 객체에서 공유하게 만들어 메모리 사용량을 줄인다. 예제1) 숲에 들어갈 나무들 숲에 들어가는 나무들에 대한 데이터를 나무 개수만큼 처리하려면 메모리, 버스 비용이 많이 든다. 나무에 대한 공통된 데이터(메시와 텍스처)는 하나만 만들어 포인터로 공유하고,나무별로 서로 다른 상태 값(위치, 크기 등)만 Tree 클래스에서 갖게 한다. GPU에도 공유 데이터를 딱 한 번만 전달하고 모든 나무 인스턴스를 그릴 때 공유 데이터를 사용하도록 해야한다. 이러한 인.. 공부 잡동사니/디자인 패턴 2024. 8. 29. 게임 프로그래밍 패턴 : [1] 명령(command) 패턴 명령 패턴은 함수 호출을 객체로 감싸는 것. (콜백) 예제 1) 입력키 변경.키 입력을 체크해서 바로 실행할 함수를 호출하면 입력키 변경이 불가능하다.키 변경을 지원하기 위해서는 jump() 같은 함수를 직접 호출하지 않고 한 겹 우회하는 객체를 만든다. class Command{public: virtual ~Command() {}; virtual void Excute() = 0;};class JumpCommand : public Command{public: virtual void Excute() { std::cout Input Handlerclass InputHandler{public: InputHandler(); void HandleInput(); template void BindSpace.. 공부 잡동사니/디자인 패턴 2024. 8. 28. [UE5] Enhanced Input - 이동/회전 WASD 이동과 마우스 회전을 Enhanced Input을 이용해 구현해보자 1. 프로젝트명.build 파일에서 EnhanedInput을 추가해준다. PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" }); 2. DataAsset을 상속받은 클래스를 생성하고 UInputAction 두 개를 추가한다. UCLASS()class MAGK_API UInputConfigData : public UDataAsset{ GENERATED_BODY() public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) class U.. 공부 잡동사니/Unreal Engine 2024. 2. 8. GAS Build.cs 파일에서 "GameplayAbilities", "GameplayTags", "GameplayTasks" 추가 !!! PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GameplayAbilities", "GameplayTags", "GameplayTasks"}); AbilitySystemComopnent AttributeSet 클래스 상속받아 만들기 AbilitySytemComponent는 GAS 총괄하는 것 AttributeSet은 스탯을 관리 Monster는 사라질 때 스탯 등 사라져도 되므로 Monster클래스 자체에 Attri.. 공부 잡동사니/Unreal Engine 2023. 8. 2. 외곽선 처리 유니티 언리얼 모두 deferred rendering . Shader를 호출할 때 정보들을 모은 다음 나중에 그린다. 화면을 그릴 때 많은 정보들이 포함되어 있음. 이러한 정보들을 조합해서 그린다. PostProcessingVolme -> Infinite Extent 체크하면 위치/크기와 상관없이 모든 부분이 영향을 받는다. 이 Volume에 Highlight 머티리얼을 넣어줄 것이다. 후처리용 머티리얼!! PostProcessingVolme에 그냥 그대로 넣으면 세상이 빨개진다. outline과 가장 연관있는 것은 깊이 depth 값이다. 여러 개의 사각형(텍셀)으로 이루어져있음을 생각해보자. 물체의 바깥에 있는 텍셀과 안쪽 텍셀의 수치를 다르게 준다. 예를들어 바깥에 있는 것은 1000, 안쪽은 1... 공부 잡동사니/Unreal Engine 2023. 7. 19. 칼 붙이기 Socket 에서 Add Socket 해서 칼을 붙여주면 된다. Add Preview Asset으로 입혀보고 위치를 잡는다 spawnActor 함수로 칼 생성 -> 플레이어 소켓에 붙여준다. Mesh에서 GetSocketTransform 으로부터 만들어준 소켓 위치를 얻어와서 연결하면 된다. (BP에서) 소켓에 액터를 붙여줘야 하므로 AttachActorToComponent 로 Mesh에 붙여주고 Socket Name을 지정해준다. Snap to Target . 딱 그 위치에 달라붙게. Collision -> 내 플레이어랑은 충돌하지 않게끔!! 칼과 충돌을 판정해서 대미지. Channel을 파주고 SphereTraceMulti로 충돌판정을 한다. 여기서 다른 것들은 적당히 맞춰주면 되고, Pawn과 Bl.. 공부 잡동사니/Unreal Engine 2023. 7. 19. [Unreal Engine 5] 플레이어 회전과 이동(1인칭/3인칭) 3인칭 캐릭터의 이동 및 회전을 구현할 때 중요한 옵션들이 있다. 이들의 체크 여부에 따라 무엇이 바뀌는지를 알아보며 3인칭 이동과 회전을 만들어보자. 모든 옵션을 해제한 기본 상태에서는 마우스 움직임으로 Control 회전을 시켰기 때문에 마우스가 움직일 때마다 Controller가 회전한다. Pawn(캐릭터)도 Controller 회전 방향으로 이동하는데, 이는 Controller로부터 Forward/Right Vector를 가져와서 이동시켰기 때문이다. 만일 GetActorForwardVector 등 Actor기반의 함수를 이용하면 Actor의 방향을 기준으로 이동한다. 기본 상태. Control 회전 방향으로 이동 Camera의 Use Pawn Control Rotation을 켜면 카메라가 Con.. 공부 잡동사니/Unreal Engine 2023. 7. 18. Animation Montage 스킬때문에 필요한 것임 상태에다가 스킬을 넣어주는 것이 맞나? 애매하다 스킬에 따라서 스킬이 다양하기 때문 또 어쨌든 공격하면서도 Idle인지 등등 알아야 한다 상태 기반으로 관리 기존 애니메이션은 유지한 채로 Slot을 넣어서 , 애니메이션을 고친다. 스킬 말고도 사용 범위가 넓다 애니메이션을 합친다. 이어서 재생되게 함 -> 예를들면연속스킬 만들때 유용함 애니메이션 플레이하듯 플레이해주면 된다 슬롯을 골라줄 수 있다. 만들 수도 있음 슬롯을 통과시켜줘야 그 슬롯에 해당하는 몽타주 애니메이션이 틀어진다. 그레이스톤 몽타주 예시! 애니메이션의 재생 시점에 따라서 뭔가를 해주어야 하는 경우가 많다. 위의 경우에는 일어날 때 파티클을 재생시키고 있다. 이런 예시가 많다. 예를 들어 발바국이 닿을 때마다 소리.. 공부 잡동사니/Unreal Engine 2023. 7. 18. 이전 1 2 3 4 다음