Uneal - EQS Strafe이동
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
EQS(Environment Query System)란?언리얼 엔진의 AI시스템중 한개, AI가 환경을 실시간으로 분석, 최적의 위치를 계산하는것을 도와주는 시스템입니다 AI가 플레이어를 피해서 숨을때 적절한 엄폐물 위치를 계산하거나원하는 조건 위치로 최적의 위치포인트를 잡을때라던지 여러가지 환경에서 여러가지 후보를 계산하고 가장 최적의 결과를 반환합니다. EQS를 생성해보겠습니다인바이런먼트쿼리를 생성해줍니다 그럼 BehaviorTree와 비슷한 환경이 나옵니다 루트에서 자기가 사용할 포인트방식을 지정해주겠습니다 저는 도넛모양을 선택해주었습니다 EQS는 단독으로 실행이 불가능합니다EQS Testing Pawn을 생성하여 확인해보겠습니다 블루프린트생성 -> EQSTestingPawn을 생성해주겠습니다 Te..
Unreal - AI에게 HP 프로그래스바 붙히기
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
AI가 Perception으로 Player를 인지하면 AI머리위에 HP에 비례한 ProgressBar를 가지고있는 위젯을 띄워보겠습니다 UserWidget을 상속받은 위젯을 만들어주겠습니다 이름은 SkeletonHPBarWidget이라고 이름지어주었습니다 해당c++를 상속받은 블루프린트를 만들어주고위젯을 해당 그림과 같이 설정해주었습니다Custom / Width = 150, Height = 100 , 앵커 중앙입니다해당 위젯을 AI가 가지기 위해 AI에서 위젯컴포넌트형식으로 달아주겠습니다 .h에서 UWidgetComponent를 선언UPROPERTY(EditAnywhere, Category = "MySettings")class UWidgetComponent* hpFloatingWidget; 생성자에서 만..
Unreal - ProjectTile을 사용한 원거리 AI 만들기
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
근거리 AI를 기반으로 원거리공격을하는 AI를 만들어보겠습니다근거리공격 AI의 객체부터 만들어주겠습니다BasicSkeleton을 기반으로 블루프린트를 복사해 추가해주고 무기를 들려주었습니다사용할 슈팅 애니메이션을 Mixamo에서 가져온뒤 리타게팅해주겠습니다공격하는 BehaviorTree에서 Service노드를 조건을 바꿔주겠습니다원래의 코드입니다기본코드는 170의 거리기준으로 공격을 하기떄문에 이 170값을변수로 선언하고 property값으로 변동할수있도록 해주겠습니다 변수로 선언하며 Property로 수정 가능하게 추가 조건을 attackDistance값으로 변동하였습니다 원래있던 BT를 복사후 원거리 AI에게만 적용될 BT의 Attack Distance값을 170에서 700으로 바꿔주었습니다 또한 A..
BehaviorTree의 currentTime 디버깅
·
Unreal 디버깅
언리얼엔진에서 만약 BehaviorTree AI를 사용했을때그냥 currentTime을 선언한후 DeltaSeconds에 누적하여 그 currentTime에 따라 task의 실행을 좌우했엇다 하지만 이런경우 AI가 여러마리인 경우 CurrentTime의 누적이 일어나 훨씬 빠른주기를 가져버리는 현상이 일어난다 이럴때는 currentTime이 아닌 Struct로 따로 메모리에 변수를 가지고그변수에 따라 값을 조절하면된다사용하고있는 태스크에 위쪽에 USTRUCT형식으로 메모리변수를 선언 USTRUCT()struct FTaskSkeletonAttackMemory{ GENERATED_BODY() float structCurrentTime = 0.0f; float randomEndTime;}; ExcuteTask..
Unreal - Behavior Tree(5) 스폰 / 디스폰
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
BehaviorTree에서 앞서 만들어둔 Dissolve Material을 사용하여스폰과 디스폰을 구현해보도록하겠습니다 Dissolve Material 제작방법2025.05.08 - [Unreal5 프로젝트 다이어리] - Unreal - Dissolve Material Unreal - Dissolve MaterialBehavior Tree의 AI가 죽었을때 애니메이션이 나오면서 사라지게하는것도 나쁘지않지만갑자기 사라져버리는것보다는 점점 사라지면서 마지막에는 없어지는방식으로 표현한다면 조금더 자연스러lucodev.tistory.com 처음에 스폰을 했냐 안했냐 를 담당할 블랙보드키와해당 키를 변경해줄 Task를 생성해주겠습니다Spawn이라는 bool blackboard key를 추가해주었습니다 AI의 Di..
Unreal - Dissolve Material
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
Behavior Tree의 AI가 죽었을때 애니메이션이 나오면서 사라지게하는것도 나쁘지않지만갑자기 사라져버리는것보다는 점점 사라지면서 마지막에는 없어지는방식으로 표현한다면 조금더 자연스러운 연출을 유도할수있습니다 (※해당 글에서는 사용하고있는 에셋이 마스터블렌딩메테리얼을 사용하는방식이라 기존 메테리얼사용방식과는 좀 다를수있습니다기존 일방적인 메테리얼 방식을 사용하는 경우 글 제일 밑 사진에 나와있는것처럼 노드를 연결해주시면되겠습니다) 이럴떄는 Dissolve Material을 사용하여 연출할수있습니다제가 사용하고있는 메테리얼을 확인해보겠습니다보통의 메테리얼과 다른것을 확인할수있습니다 해당 그림의 메테리얼은 마스터 블렌딩 메테리얼이라고 합니다일반적인 메테리얼보다는 조금더 유동적이고 메테리얼 인스턴스를 통..
프로그래머스(C++) - 숫자 문자열과 영단어
·
C++ 프로그래머스/기타 문제
●문제●간단한 설명string s 가 있음s는 one이나 1 이런식으로 숫자나 string으로 존재할수있음값을 전부 숫자로 정리해서 return ●내가 푼 방법unordred_map을 사용해서 0부터 9까지 맵을 생성isdigit함수를 사용해서 문자면 그냥 값을 넣고아니라면 map에 있는 값을 넣어줌s[i]가 문자가 아닌경우 map에서 값을넣어준뒤 clear해서 다음숫자 체킹마지막으로 구한 string값을 stoi로 int로 변형해서 return ●알아야하는 개념 / 알게된 개념isdigit 은 문자? 라는 개념이다ordered_map의 사용법 #include #include #include #include using namespace std;int solution(string s) { int a..
프로그래머스(C++) - 최대공약수와 최소공배수
·
C++ 프로그래머스/C++ Math
●문제 ●간단한 설명int n값, int m값 dn과 m의 최대공약수(GCD)와 최소공배수(LCM)을 return ●내가 푼 방법유클리드 호제법 사용나머지가 0이 될때까지 계속 나누는것을 반복하면 그때의 n값이 최대공약수가 됨원래n과 m값을 저장유클리드 호제법으로 GCD를 구함(n* m) / GCD 로 LCM을 구함결과를 {GCD, LCM}형태로 returnabs(a, b)로 최소공배수를 구함 ●알아야하는 개념 / 알게된 개념유클리드 호제법의 사용최소공배수를 구하는공식 = LCM(a, b) = abs(a * b) / GCD(a, b) #include #include #include using namespace std;vector solution(int n, int m){ int gcd; int lcd; ..
프로그래머스(C++) - 시저 함수
·
C++ 프로그래머스/기타 문제
●문제 ●간단한 설명string값 s, int 값 n, 결과값 string 존재s값에서 n값 알파벳 순서만큼 민 result값 return ●내가 푼 방법대문자와 소문자 아스키코드값 사이에서(+n만큼 더해주고 -아스키코드값) % 알파벳갯수 - '대문자나 소문자' ●알아야하는 개념 / 알게된 개념아스키코드에서 A ~ Z 는 65번 ~ 90번아스키코드에서 a ~ z 는 97번 ~ 122번반드시 공백도 처리해줄것 #include #include using namespace std;string solution(string s, int n) { string answer = ""; for (int i = 0; i = 65 && s[i] = 97 && s[i]
Unreal - Behavior Tree(4) AI Perception Team ID
·
Unreal 프로젝트 다이어리/첫번째 프로젝트
현재 AI Perception의 감지 여부는 이렇습니다적 감지 활성화중립 감지 활성화아군감지 비활성화 입니다 수정해주겠습니다중립을 제외시켜줍니다 AI 의 컨트롤러에서 .h 에서 IGenericTeamAgentInterface를 상속받습니다또한 플레이어의 .h에서도 IGenericTeamAgentInterface를 상속받습니다.h에서 필요한 헤더를 추가해줍니다#include "GenericTeamAgentInterface.h"각각 제일 끝에 public IGenericTeamAgentInterface를 추가해줍니다 Perception을 사용하는AI의 AI컨트롤러의.h 에 GetTeamAttitudeTowards와 GetGenericTeamId의 메서드를 정의하기위해 override 해줍니다virtual E..