기본 콘텐츠로 건너뛰기

250411 스킬, Actor Component, Physics Material, MetaSoundSource

장비 바꾸기

BP_Puzzle Engine에 추가할 아이템들을 미리 넣고, Visible을 False로 한다.

해당 번호를 누르면 Set Visibility를 이용해서 그 물체가 보이게하고, Timeline을 이용해서 Relative Location의 위치를 바꾸어가며 무기를 꺼내는 듯한 모습을 보이게 한다.

IsTimeline을 이용해서 타임라인이 아직 실행중일 때는 전환되지 않도록 한다.

Remove Equip 이벤트를 넣어서 장비를 바꿀 때 다른 장비가 안보이게 미리 설정한다.


 


단순히 손에 들면 되는 장비와 다르게,
도끼나 총과 같은 것들은 휘두르거나 사용할 수 있어야 하므로 각각의 이벤트를 만들어서 다룬다.

도끼

타임라인을 통해 도끼의 회전값을 변경해서 휘두르게한다.

여기에 Sphere trace를 이용해서 해당하는 위치에 Force를 적용한다.


피스톨

BP_Bullet을 생성하는 방식으로 한다.

총의 앞부분에 ArrowComponent를 추가해주고, Location과 World Rotation을 설정한다.

BP_Bullet

충돌 설정을 BlockAll로 바꾸어주고, Projectile의 Speed를 적당한 값을준다.
속도에 맞추어 회전하도록 Rotation Follows Velocity또한 설정해 준다.
닿은 위치에 Impulse를 주도록 한다.

갖고 있는 무기 숨기기
equals를 이용해서 동일한 Equip라면 Remove하고 Enum Equip을 None으로 바꾸어준다.


아이템 회전
Rotating Movement

Vertical Box의 설정을 Content에 맞도록 한다.
Canvas 설정에 Desired로 바꾸어주어야한다.

BP_pickup을 만들어서 위젯을 컴포넌트로 추가
Draw at Desire Size 체크

다시 BP_Item으로 가서, Child Actor를 추가하고 BP_Pickup을 선택. 크기를 조정 해주자.

Sphere의 충돌 확인시, 해당 BP_Pickup액터를 추가하고 나가면 사라지도록 한다.



Actor Component
액터 컴포넌트또한 마찬가지로 컴포넌트인데, 여기서 정의한 컴포넌트를 다른 캐릭터에도 다시 재활용 할 수 있는 방식으로 만들기 위해 사용한다.


시간 느리게 하기
현재 사용하는 캐릭터를 저장한다.

TimeDilation을 이용해서, 값을 저장하고, 반대로 다시 같은 키를 누르면 1.0으로 돌아오도록 한다. 여기서는 느리게할 속도값을 저장해서, 1로 나눈값을 곱해주는 방식으로 되돌아오게 하였다.



시간 멈추기
Freeze Time Dilation = 0.0001
Free time Player = 1
실질적으로는 0이 아닌 값을 이용한다.



대쉬
앞선 방식과 동일하게 하되 이번에는 연속해서 플레이어가 대쉬하지 못하도록 bool과 Delay를 사용한다.

플레이어의 Forward 벡터에 갑을 곱하고 Launch를 이용해서 더해준다.
XY Override를 사용해야 일정한 값을 줄 수 있다.

텔레포트
Trace에 관련한 노드를 만들어서 텔레포트할 위치를 정한다.

우리가 텔레포트할 위치를 알기 쉽도록 하기위해 SPhere가 있는 액터 하나를 만들어서 Trace해서 닿은 물체가 있으면 해당 Location에 반대로 없으면 TraceEnd에 위치한다.

Teleport라는 정의된 함수를 이용하고 저장해놓은 Location과 캐릭터, 회전값을 가져와서 이동한다. 이동한 후에는 타이머와 우리가 텔레포트할 위치를 보여주는 구체도 삭제해줘야 한다. 연속으로 사용하지 못하도록 마찬가지로 Delay와 bool를 사용한다.



Physics Material










Struct를 하나 만들어준다.

플레이어 블루프린트로 가서 해당 Struct 변수를 추가하여 사운드를 넣어준다.

FootStep Interval만큼 걸으면 소리가 나게 할 것이다.
나머지는 각 메티리얼에 맞는 소리를 넣어주면 된다.


플레이어의 위치에서 저장한 위치 값을 빼준 만큼의 Vector 거리가 위치 값에서 뺀값이 Struct안의 Interval보다 크게 될 경우, 한 번더 Is Moving On Ground로 바닥인지 확인한다.

그렇게 되면, Trace를 이용해 플레이어의 아래 벡터의 위치에 사운드를 플레이하게 한다.
Struct를 Break하고, Phys Material의 SurfaceType을 가져와서 Select한 다음, Spawn Sound at Location으로 소리를 넣는다.
마지막으로 다시 보폭 값을 초기화 해준다.


플레이어의 Input에 넣는다.


랜덤 소리
Soundque를 이용해서도 할 수 있지만,
MetaSoundSource를 이용하여 랜덤한 사운드를 재생한다.


적용하고 Struct를 바꾸어주면 적용된다.


착지 사운드
캐릭터의 이벤트 그래프에 Landed를 사용한다.
True를 전달하므로, Branch를 통해 True 값이 들어오면 바로 소리를 재생하게 한다.





이 블로그의 인기 게시물

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