기본 콘텐츠로 건너뛰기

250414 충돌

충돌


중요한 것은 Object Channels, 그리고 충돌의 대상이 아니라, 충돌을 하는 내가 더 중요하다는 것이다.

Object Channel

Name : 해당 채널의 이름

Default Response : 각 물체에 대한 기본 설정. 각각 물체에 대해서는 따로 해주어야 함.

Ignore : 무시

Overlap : 겹침

Block : 가로막음


Preset
Collision Enabled : 
Object Type : 오브젝트의 타입 앞서 설정한 것들


Overlap
Generate Overlap Events를 반드시 체크해주어야 한다.

겹침을 판정할 때는 Generate Overlap Events를 체크해주어야 하고, 
하나는 Block 하나는 Overlap으로 해야한다.

Block - Overlap, Overlap - Block, Overlap - Overlap의 경우만 발생한다.
Block - Block의 경우는 겹쳐지지 않아서 발생하지 않는다.

Multi Trace
판단 하기 위해서 WeaponFireTrace라는 채널을 추가하여 사용한다.

ObjectType에서 내가 검증되기를 원하는 트레이스 채널인 WeaponFireTrace에 Overlap으로 체크 해준다.

다중 트레이스, Overlap을 전부 인식하고, 처음 Block을 만날 때까지 충돌을 판정한다.
For Each Loop를 쓴다는 점이 조금 다르다.


Is Simulate Physics를 통해서, 해당 물체가 물리 연산을 할지 말지를 판단해주고 여기에 Add Impulse at Location을 통해 물체에 충돌을 준다.
Spawn Emitter at Location을 통해, 해당 위치에 Emitter를 생성하고, Play Sound 2D를 통해 소리를 재생한다.

Multi Line Trace For Objects
또 다른 방식으로 내가 충돌 판정을 하고 싶은 오브젝트 타입을 정하고 사용할 수 있는 이런 방식도 존재한다.

Trace by Profile
하나의 오브젝트 타입으로 Profile을 정해서 할 수 있는 방식.

플레이어 조준
위젯 블루프린트를 만들어서, 줌하는 경우에 생성 Viewport에 추가하고 타임라인으로 Spring Arm의 Target Arm Length를 바꾸어주고 있다.

아이템 줍기
플레이어가 아이템을 줍게하기 위해 오브젝트 타입과 프리셋을 만들어 적용해준다.

Item 오브젝트 타입과 프리셋도 만들어준다.

캐릭터에 OperateSphere을 붙여준다.

Begin Overlap에서 아이템 오브젝트를 저장하고, 아이템의 존재 여부를 True로 한다.
End Overlap이 되면 반대로 아이템을 비우고, 아이템의 존재 여부를 False로 한다.

액션을 이용해서 버튼을 누르면 함수가 동작하게 하고 여기에 Operate_BP를 이용해서, 아이템의 존재 여부와 유효 여부를 확인하고 몽타주를 재생한다. 그리고 변수 하나를 이용해서 아이템의 습득 여부를 바꾸고 액터를 파괴한다.




🦴🦾참고

Collision
https://dev.epicgames.com/documentation/en-us/unreal-engine/API

멀티 라인 트레이스 오브젝트
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/using-a-multi-line-trace-raycast-by-object-in-unreal-engine?application_version=5.3

멀티 라인 트레이스 채널
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/using-a-multi-line-trace-raycast-by-channel-in-unreal-engine?application_version=5.3

Is Simulating Physics
https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Physics/IsSimulatingPhysics?application_version=5.3

Add Impulse at Location
https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Physics/AddImpulseatLocation?application_version=5.3

이 블로그의 인기 게시물

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