[UE] 몬스터 AI 구현 #4 (몬스터 기본 클래스 구성)
·
언리얼엔진(UE)
1. 클래스 전체 구성공통적인 기본적인 구성 요소를 담는 BaseEnemy ex) HP, Score, 사망 처리 함수 등BaseEnemy를 상속하여 서로 다른 유형의 공격을 하는 Melee, Ranged 로 Enemy 분류2. BaseEnemyBaseEnemy.h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "BaseEnemy.generated.h"UCLASS()class STARHUNT_API ABaseEnemy : public ACharacter{ GENERATED_..
[UE] 몬스터 AI 구현 #3 (Behavior Tree)
·
언리얼엔진(UE)
1. 추적 및 캐릭터 공격AI Controller에 Behavior Tree 할당 (Set State as Passive는 아래 설명)AI의 상태를 나타내는 Enum 생성Passive, Attacking 상태로 설정해주는 함수 생성 ㅡ> 해당 State 기반으로 행동 결정(Decorator)몬스터 클래스에 Attack 함수 생성 (Call On Attack End는 공격이 끝났을 때 알림을 주는 함수)BTTask로 DefaultAttack 생성 (Attack 수행 후, 끝났다는 알림이 오면 행동 마무리)상태를 나타내는 변수 및 공격 대상을 저장할 Key Blackboard에 추가BTTask로 ClearFocus, FocusTarget 생성 (FocusTarget은 BT에서 Attack Target Key..
[UE] 몬스터 AI 구현 #2 (애니메이션 관련 이슈 해결)
·
언리얼엔진(UE)
1. 문제 상황오늘은 적 AI를 구현하면서 애니메이션을 점검하는 중에 문제가 발생했다. 애니메이션 블루프린트를 내가 조종하는 캐릭터에 적용하면 이동할 때 걷기, 뛰기 모션이 정상 적용이 되는데, AI가 움직이는 적에 적용했을 때는 적용이 되지 않았기 때문이다. 2. 해결 과정1. 애니메이션 블루프린트가 어딘가 문제가 있을지 모름 ㅡ> 전체적으로 살펴본 결과 그다지 문제 없어 보임2. 스피드, 가속도 값들이 정상적으로 초기화되고 있는지 확인 ㅡ> 계속해서 0으로 확인3. Character Movement Component를 통해 해당 값들을 초기화 중 ㅡ> 캐릭터가 움직이는 와중에도 값이 0임4. 왜 이런 현상이 발생할까? ㅡ> AI가 캐릭터를 움직이는 과정에서 Character Movement Compo..
[코테] 프로그래머스 - 연속된 부분 수열의 합
·
코테
1. 문제비내림차순 수열과 목표에 해당하는 값 k 제공수열에서 원소와 원소 사이의 값들을 모두 합한 부분 수열의 합이 k인 인덱스를 탐색인덱스 사이의 길이가 짧은 것이 우선2. 풀이비내림차순의 정렬된 수열 ㅡ> 뒤로 갈수록 같거나 큰 수 등장수열에서 부분 수열의 시작, 종료 지점의 인덱스를 조절하며 k값 탐색 (투 포인터)시작, 종료 인덱스 사이의 부분 수열의 합이 k 미만 ㅡ> 종료 인덱스 증가시작, 종료 인덱스 사이의 부분 수열의 합이 k 초과 ㅡ> 시작 인덱스 증가시작, 종료 인덱스 사이의 부분 수열의 합이 k와 동일 ㅡ> 인덱스 사이의 거리가 최소인지 판별인덱스 사이의 거리가 최소라면 해당 인덱스 값으로 업데이트3. 코드#include using namespace std;vector solutio..
[UE] 몬스터 AI 구현 #1
·
언리얼엔진(UE)
1. 개요이번에는 TPS, FPS 중에 한 장르로 싱글 슈터 게임을 만드는 팀 프로젝트를 진행하게 되었다. 팀 회의를 거치면서 결국은 TPS 장르로 아주 똑같지는 않지만 퍼스트 디센던트와 같은 흐름을 가지는 게임을 만들게 될 것으로 보인다. 루트 슈터라는 장르의 모든 부분을 가져와서 구현하기에는 기간도 길지 않기 때문에 일단은 몬스터, 보스 몬스터를 잡는 플레이어가 존재하는 형태의 간단한 게임이 될 것으로 예상된다. 이번에 내가 맡은 파트는 적AI 부분이다. 아직 배운 내용도 크게 있지 않고 정말 간단한 부분만 배웠기 때문에 어느 정도까지 구현을 할 수 있을지는 모르겠지만, 구현하기 위해 겪게 될 시행착오들과 그 과정들을 정리하면 도움이 될 것 같아 이렇게 정리 글을 쓰는 것을 시작한다.2. 플레이어를 ..
[코테] 프로그래머스 - 쿼드압축 후 개수 세기 문제 풀이
·
코테
1. 문제 0과 1로 구성된 2차원 2^n X 2^n 형태의 정사각형 배열 arr 제공arr을 사등분하여 4개의 영역으로 분리나뉜 영역 내의 숫자가 모두 0이거나 1이라면 여러개의 숫자를 해당하는 수 하나로 압축모두 압축한 후 arr내의 0과 1의 개수 리턴2. 풀이주어진 배열을 모두 탐색해야할 필요성이 있음 ㅡ> 완전탐색(Brute Force) 고려사등분된 각 영역을 검사영역이 압축되지 않으면 다시 사등분하여 검사 ㅡ> 분할정복 (Divide and Conquer)계속해서 사등분하면서 배열 내 모든 부분이 압축 가능한지 검사 (DFS)결국 배열의 최소 단위인 원소 하나를 검사하게 되는 순간까지 사등분하여 검사또는, 압축이 되었다면 해당 영역은 끝 (백트래킹)3. 코드 #include using name..
Git Branch 전략 (Git-flow)
·
기타
1. 개요이번에는 팀프로젝트를 진행하게 되면서 Git에서 버전을 관리하는데 지켜야할 사항들을 정리하는 시간을 가졌다. 이전 프로젝트에서는 각자 브랜치를 따로 파고 해당 브랜치 내에서 맡은 파트를 개발하는 형식이었는데, 이번에는 튜터님께서 Git Branch와 관련된 전략 중에서 Git-flow에 대해 알아보고 해당 전략을 준수해서 Git을 관리하면 좋은 경험이 될거라는 말씀을 하셔서 Git-flow에 대해 정리하는 글을 써보게 되었다.2. Git-flowmaster - 배포용 브랜치로 release 브랜치에서 QA를 통해 버그들을 잡아낸 후에 해당 브랜치로 mergedevelop - 개발 중에 있는 브랜치, 해당 브랜치에서 개발해야할 기능이 생기면 'feature/기능명' 형태로 브랜치를 분기featur..
[C++] STL 요약 정리 #1
·
C++
1. STL 구성 요소컨테이너 - 데이터 저장하는 구조체반복자 - 컨테이너 순회를 도와주는 일종의 '포인터'알고리즘 - 정렬, 탐색, 삽입, 삭제 등의 로직을 효율적으로 제공하는 함수컨테이너vector연속적인 메모리 블록 ㅡ> 랜덤 접근 빠름원소 추가/삭제 마지막 원소에 대해 효율적 (push_back, pop_back)중간에 삽입은 비효율적 ㅡ> 데이터가 이동해야함List메모리가 연속적이지 않음 ㅡ> 랜덤 접근 느림중간 삽입/삭제 매우 효율적 ㅡ> 연결된 링크를 끊고 다시 연결만 하면 끝순차적 데이터 추가/삭제 적합Deque양방향 동적 배열임의 접근 가능, 양쪽 끝에서 삽입/삭제 빠름 (push_back, push_front, pop_back, pop_front)중간 삽입/삭제 비효율적priority_..
[UE] 슬라이드 애니메이션 개선
·
언리얼엔진(UE)
1. 문제 상황UMG를 활용해 HUD에서 'Game Over!'라는 문구에 슬라이드 애니메이션을 구현하고자 했습니다. 처음의 의도는 화면 밖에서 문구가 떨어지는 슬라이드 형태였으나, 막상 구현하고 결과물을 보니 게임 오버 메뉴가 뜨는 시점에 순간적으로 화면 가운데에 보인 다음에 위에서 떨어지는 애니메이션이 활성화되는 형태가 되어 문제 발생 3~4초 사이에 화면 가운데에 보인 후 슬라이드 애니메이션 활성화2. 원인 분석원인 추론1.화면 가운데에 나타나는 위치가 HUD 상에서 'Game Over!' 문구의 기본 위치에 해당//게임 오버 메뉴 UI 생성if (GameOverMenuWidgetClass){ GameOverMenuWidgetInstance = CreateWidget(this, GameOverMen..
[UE] UMG를 활용한 게임 HUD 및 WidgetComponent를 이용한 HP바
·
언리얼엔진(UE)
1. 개요UMG를 활용한 UI Animation 생성(슬라이드, 플리커링)HP 상태에 따라 게이지가 변화하는 형태의 HP바를 WidgetComponent를 이용해 3D위젯 형태로 생성2-1. HUD(Heads Up Display)기본적인 HUD 구성입니다. 게임 종료 문구, 점수 표시판, 재시작, 메인 메뉴 버튼으로 구성되어 있습니다. 게임 오버 텍스트 블록에 애니메이션을 적용하기 위해 화면 좌측 하단에서 다음 이미지에서 보이는 +Animation 버튼을 클릭합니다.원하는 이름을 입력하고 해당 애니메이션을 클릭한 상태에서 우측 이미지에서 보이는 +Add를 눌러 GameOverText를 선택합니다.위 이미지에서 +버튼을 눌러 Transform, Render Opacity를 각각 생성해 줍니다.Render ..

.menu_toolbar { display: none !important; }