기본 콘텐츠로 건너뛰기

250415 람다 무기변경

람다함수

간단한 함수를 선언 없이 즉석에서 사용하는 방식

[캡쳐](매개변수) {블록}

참고로 this의 경우 c++ 버전에 따라 문제가 생길 수 있음.

FTimerDelegate::CreateLambda()는 람다함수를 타이머에 연결 가능한 델리게이트로 변환

[this]는 현재 클래스의 멤버변수 함수에 접근하기 위한 캡쳐


Delay
FTimerHandler TestTimerHandle;
GetWorld()->GetTimerManager().SetTimer(TestTimerHandle, 함수, 시간, 반복여부)

아이템 줍기
SweepSingleByChannel을 이용한다.
사용할 트레이스와 오브젝트 타입의 충돌 여부를 확인한다.
사용할 트레이스 채널은 폴더 - Config - DefaultEngine.ini에 있는 TraceChannel의 Name을 확인하자.



SweepSingleByChannel(히트결과, 시작위치, 도착 위치, 회전, 트레이스 채널, 형태, 파라미터)

FQuat::Identity
회전하지 않겠다는 의미

FCollisionQueryParams Params;
Params.AddIgnoredActor(this);
현재 이 액터를 무시하기 위해서 추가

FCollisionShape::MakeBox, MakeCapsule, MakeSphere
트레이스의 형태, 박스, 캡슐, 구, 기본은 Line

상단에 IsItem을 넣어주어서 아이템이 Overlap되어 있지 않다면 줍지 않도록 리턴 한다.





Operate



다른 박스와 무기의 메쉬는 플레이어와 충돌해서 지나가지 못하도록 Blockall로 설정한다.
특히, 무기의 메쉬는 콜리전이 없을 수도 있으므로, 스태틱메시를 열어서 콜리전을 추가해줄 필요가 있을 수도 있다.

Overlap할 Collision은 Operate에 Overlap하도록 한다.


Rifle Mode
Input RifleMode를 하나 추가해서 거기에 InputMappingContext와 연결해준다.

Enum을 헤더에서 초기화
cpp파일에서 초기화

IsWeaponMap.


참고

람다
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine#%EB%9E%8C%EB%8B%A4%EB%B0%8F%EC%9D%B5%EB%AA%85%ED%95%A8%EC%88%98

타이머
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/gameplay-timers-in-unreal-engine

SweepSingleByChannel
https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/UWorld/SweepSingleByChannel

FCollisionShape
https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/PhysicsCore/FCollisionShape

이 블로그의 인기 게시물

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...