기본 콘텐츠로 건너뛰기

250520 EQS 2

Generator

위치 또는 액터인 아이템을 생성함.(디버그형로는 구형)


EQC

EnvQueryContext_Item

디버그용 구 형태의 위치/액터

EnvQueryContext_Querier

BT를 실행하는 본인 자신 Pawn

EQC를 Custom으로 만들어서 지정해 줄 수도 있다.


Test

Filter Only : 제거

Score : 가장 높은 값/ 낮은 값

Score에 의해 BlackBoard에 반환할 수 있는 값이 설정된다.

테스트 목적(Test Purpose)

테스트에 적용할 수 있는 추가 옵션과 테스트의 용도를 정의합니다. 

프로퍼티설명
Filter Only결과에 필터를 적용하는 용도입니다. 테스트를 통과하지 못한 아이템은 제거됩니다.
Score Only결과에 점수를 부여하는 용도입니다. 반환된 아이템에는 가중치 값이 부여됩니다.
Filter and Score결과에 필터를 적용하고 점수를 부여하는 용도입니다.


테스트 방식
Distance 
아이템과 선택한 Context와의 거리
ex) 아이템과 플레이어와의 거리
Dot
두 벡터의 내적.
ex) 무언가가 다른것을 향하고 있는지
Gameplay Tag
Overlap
프로퍼티로 정의한 bound(범위) 내에 아이템이 있는가
PathFinding
Context로 오거나 가는 경로의 존재 여부.
PathFinding Batch
Project
Trace
트레이스의 히트 여부. Bool값을 이용.
Context : Trace의 반대 쪽 끝
ex) 플레이어의 존재 여부



EQS 사용 과정.
1. 무엇을 만들 것인지 고민한다.
ex1) 플레이어의 근처 주변 위치로 이동하게 만들자.
ex2) 플레이어의 시야 밖으로 만들자.

2. 아이템이 필요하므로 제너레이터를 생성하여 어떤 것으로 할지 고른다.
ex1) Points of Circle를 통해, 원형 아이템을 생성한다.
ex2) Actor Of Class로 특정 클래스를 대상으로 한다.

3. 어떤 아이템을 골라 반환할지 필요하므로 Test를 설정한다.
ex1) 플레이어의 근처를 이용 할 것이므로 Test는 Distance, EQC는 PlayerActor가 된다.
Filter Type은 Range로 적당한 값을, Scoring Factor 는 -1,
반환해서 돌려 줄 값이 Vector가 되므로, BlackBoard에 TargetVector 변수를 하나 만들어서 거기에 값을 준다. Move To에 TargetVector를 설정해준다.
ex2) 플레이어의 시야를 이용할 것이므로, Test는 Trace, EQC는 PlayerActor가 된다.


EQS 다중 Test 사용 예시 
우리가 만들고자 하는 것은, 플레이어의 시야밖에 있는 엄폐물로 '적'이 피하도록 만드는 것이다. 여기서 이 EQS를 실행하는 것은 '적'이라는 것에 주의하자.

1. '적'은 엄폐물 근처로 이동하여야 한다.
2. 플레이어의 시야에 들어오지 않아야한다.
3. 플레이어와는 멀어야하고, '적'과는 가까워야 한다.


Generator
제너레이터를 이용해서 이동할 위치를 설정한다. 이 위치/액터들을 Item이라 부른다.
여기서의 Context를 플레이어 기준으로 할 수도 있고, Querior 자신으로 할 것 인가는 설정하는 사람 마음이다. 맵의 크기에 따라서는 플레이어를 기준으로 전체 맵의 범위로 아이템을 생성할 수도 있을 것이고, 이는 많은 메모리 낭비가 될 수도 있다. 여기서는 '적'을 기준으로 한다.

Trace
설정한 Context를 기준으로, 설정한 TraceChannel을 Shape의 형태로 발사한다.
여기서, Trace를 맞고 난 후 다음 Item(구체)에 값이 들어가게 된다.
Trace Visibility를 사용하였는데, Block되는 물체를 특정화하고 싶다면. 자체적인 TraceChannel을 생성하여 판단해주는 것이 좋을 것이다.

Overlap
겹침을 판단하는 것으로, 해당 Ovelap은 설정한 Overlap Channel과 OvelapShape, Data에 해당하는 XYZ크기로 설정된다. Item의 해당 위치에 이 Ovelap이 생성되어서, 겹침이 발생 하였을 경우, 점수를 주게 된다.

위의 경우 Overlap WeaponFireTrace로 설정하여 Enemy의 주변 위치에도 점수를 받게 되므로, 가능하면 다른 TraceChannel을 만들고, ObjectType 엄폐벽을 하나 만들어서 해당 채널에 대한 엄폐벽만 Overlap 또는 Block하게 설정하자.



Distance
역할은 거리에 따른 점수를 주는 것이다.
Context의 위치를 기준으로 Scoring Factor에 따라 가까우면(-1, 음수)를 또는 멀수록 (1또는 양수)를 점수로 할 수 있다.
Filter를 이용하면 거리에 범위 값을 설정 할 수 있다.

첫번째의 경우 Context가 Querier로 자신으로부터 가까울 수록 점수를 주게 하였다.
두번째의 경우 Context가 Player로 플레이어로부터 멀 수록 점수를 주게 하였다.




이 블로그의 인기 게시물

250523 PCG 2

PCG Building Volume Sampler를 사용할 경우 Voxel Size를 맞추어주자. 2m길이를 Transform Points로 Offset을 이동시켜 Difference를 통해 메쉬를 생성한다. 사용시에 Pivot의 위치가 중앙이 아니면 제대로 표현되지 않을 것이다. PCG Landscape Landscape 생성후 PCG Volume 생성. Get Landscape Data - Surface Sampler 안보인다면 Generate Surface Sampler 일반 그리드 패턴으로 서피스 데이터에 포인트를 샘플링합니다. 이 노드에는 다음과 같은 옵션이 있습니다. 포인트 규모(Point Extents) : 서피스의 기본 그리드 셀 크기를 정의합니다. 여유(Looseness) : 변형 가능한 셀 크기를 정의합니다. 실제로 셀 크기는 포인트 규모 * (1 + 여유)입니다. 제곱미터당 포인트(Points Per Square Meter) : 유지되는 셀의 비율을 계산합니다. 이 프로퍼티는 그리드가 클 때 과잉을 제한합니다. Looseness : 기본 1. 0일경우 Extent의 길이 만큼, 1일경우 2배가 됨.  Attribute Filter를 생성하고, Material에 해당하는 Layer를 찾아서 이름을 넣어준다. Type을 Float로 하고 Float Value를 설정하면, 해당 머티리얼이 색칠된 정도 0~1에서 Operator에 의해 >(초과) 0.6초과 일 경우만 생성되게 할 수 있다. 값을 1로 하고 Equal을 이용해서 1인 경우만 생성되게 하는 것도 가능하다. plugin Water body lake를 넣으면, 이또한 Spline이라는 것을 알 수 있다. 따라서 Get Spline Data-Spline Sampler를 통해 사용할 수 있다. GetActorData와 Difference를 통해서 Lake내부를 제거해주기 PCG Mesh Mesh Sampler를 쓰기위해 Get Actor Property를 이용하면, 해당 액터가 ...

250604 저장불러오기

SaveGame 블루프린트 생성 Game Instance 생성, Init 오버라이드 AC_Inventory Save Load

250609 온라인

 Online Subsystem외에도 어느 서버를 사용할 것인지에 따라 플러그인을 추가해주어야 한다. 공통으로 OnlineSubsystem으로 시작한다. 헤더파일 CPP파일 cmd에서 Ipconfig를 통해 Ipv4를 넣어주면 된다. DefaultEngine.ini 수정 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/online-subsystem-steam-interface-in-unreal-engine#%EC%99%84%EC%84%B1%EC%84%B8%ED%8C%85 [/Script/Engine.GameEngine] +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") [OnlineSubsystem] DefaultPlatformService=Steam [OnlineSubsystemSteam] bEnabled=true SteamDevAppId=480 bInitServerOnclient=true [/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection" 전용 서버 없이 클라이언트가 서버를 만들 수 있게 함. 호스팅 Binaries와 Saved파일을 한번 제거해주고, Generate해주기 헤더파일 헤더파일 CPP 파일 CreateSessionComplete, FindSessionsComplete, JoinSessionComplete 생성자 CreateGameSession 세션을 생성하고 존재하면 제거한다. OnCreateSessionComplete ServerTrav...