본문 바로가기

언리얼537

[언리얼5] 범위공격(feat. 로켓런처) 멀티플레이 슈팅 게임 프로젝트를 만들며 단순한 사격뿐만아닌 수류탄, 로켓런처등 넓은 범위를 공격하기위한 무기를 만들며 방사선상 공격에 대하여 정리. 일반적인 공격에 대해서는 OnTakeAnyDamage 에 피격시 이벤트를 바인딩하여 사용. 이때 데미지를 주는 액터에서 충돌시 원형범위(Radial)에 있는 다른 액터들에게 범위에따라 다른 데미지를 전달할 수 있는 함수를 사용 할 수 있다. UGameplayStatics::ApplyRadialDamageWithFalloff 를 사용. 이때 매개변수는 적당히 설정 해주는데 만일 범위공격이 특정 액터에게 피해를 주지 않는다면 TArray() 매개변수를 해당 액터 클래스로 지정해 주도록 한다. 비어있는 배열을 넣을 경우 공격한 본인도 데미지를 입을 수 있다. 2024. 3. 20.
[언리얼5] 멀티플레이 시간 동기화 멀티플레이 프로젝트를 진행하며 서버와 클라이언트간의 시간차이를 줄이기 위해서는 클라이언트가 서버의 현재시간을 요청하면서 요청한 시간부터 서버에서 회신 하는 시간까지의 타임렉을 이용하여 클라이언트의 시간을 서버의 시간으로 동기화 한다. 클라이언트(IsLocalController)가 동기화를 요청 클라이언트에서 동기화를 요청하여 서버RPC를 사용하여 서버의 현재 시간을 확인 한다. 이후 서버는 해당 요청(함수)를 실행하는데 매개변수(클라이언트의 현재시간)를 확인해서 클라이언트에게 시간을 전달 한다. 클라이언트는 서버에서 받아온 시간과 현재 자신의 시간 차이의 값을 계산하고 해당 값을 반으로 나눈(클라이언트 에서요청 시작 ~ 서버가 회신하고 다시클라이언트에게 회신 하기때문에 왕복시간이아닌 편도시간만 계산)시간.. 2024. 3. 18.
[언리얼5] 콜리전 커스텀 채널 생성하기(C++) 엔진에 기본적으로 마련되어져있는 충돌 채널 외 원하는 채널을 생성할 수 있습니다. 오브젝터 채널 생성 프로젝트 세팅 > 엔진-콜리전 > 새 오브젝트 채널 생성 을 통하여 원하는 채널을 생성해 주도록 합니다. 테스트로 스켈레탈 메시 전용 채널을 생성. 매크로 생성하기 C++ 프로젝트의 헤더 파일에 매크로를 생성 합니다. 매크로는 단순하게 ECC_GameTraceChannel1을 사용자지정으로 쓸 것이지만 이름을 좀더 명확하게 하기 위하여 생성한 것입니다. 예시로 제 프로젝트는 SKH_MultiShooting 이라는 프로젝트이기때문에 SKH_MultiShooting.h 에 매크로를 추가하고, 이후 해당 채널을 사용하기 위한 클래스에 헤더를 선언한 후 사용이 가능합니다. 엔진의 설명에 있는 것처럼 커스텀 채널.. 2024. 3. 8.
[언리얼5] 동적 크로스 헤어 사격하기위한 위치를 표시하는 CrossHair를 HUD를 통하여 화면에 그린다. 이때 플레이어의 다양한 움직임의 조건에 의하여 화면에 그려지는 크로스헤어는 벌어지거나 화면의 중심으로 모이는 움직임을 구현. 게임모드에 사용될 HUD 클래스를 생성 이때 크로스헤어는 동적으로(벌어지는 모션)움직여야 하기때문에 한장의 텍스처가아닌 크로스헤어의 중심, 상, 하, 좌, 우 5개의 변수로 나누고 텍스처를 적용 한다. HUD 클래스에 구조체를 만들어 각각 Center, Left, Right, Top, Bottom 멤버 변수로 생성 HUD 클래스는 Tick이아닌 DrawHUD를 통하여 매프레임 화면에 텍스처를 그린다. 화면에 텍스처를 그릴때에 주의해야할 점은 텍스처의 좌표체계는 UV 좌측상단이 0,0 우측하단이 1,1의.. 2024. 3. 6.
[언리얼5] 탄피 시뮬레이트피직스 & 타이머 플레이어가 사격할 때 총알이 발사되고 탄피가 배출되는 모션 테스트 탄피가 필요하므로 탄피 클래스를 벌도로 생성한뒤 단순하게 메쉬만 컴포넌트만 생성. 추가적으로 탄피가 배출될 때 AddImpulse 함수를 사용 탄피는 무기 클래스가 생성한다. 탄피클래스에서 메쉬를 생성할때에 주의해야할 점은 StaticMeshComponent에 카메라의 스프링암에 걸리지 않도록 카메라를 예외처리 해주어야 하며 자연스럽게 임펄스와 중력의 힘을 받기위해서는 시뮬레이트피직스를 설정하고 중력을 설정 해야 한다. 추가적으로 SetNotifyRigidBodyCollision을 설정하거나 블루프린트의 피직스충돌처리 옵션을 true로 설정해줘야 추가적인 충돌이벤트를 구현 할 수 있다. 개인적으로 탄피가 바닥에 떨어지거나 다른 물체에 충돌.. 2024. 3. 5.
[언리얼5] 멀티플레이 사격 테스트(NetMulticast) 플레이어 캐릭터에 무기를 장착하고 사격하는 애니메이션을 재생시킨다. 이때 무기 클래스를 별도로 만들고 무기의 애니메이션을 따로 넣어 준다. 테스트1 서버에서는 아이템 장착 애니메이션과 사격 애니메이션등이 정상적으로 이루어지지만 클라이언트에서는 해당 애니메이션들이 복사되지 않고 있는 것을 볼 수 있다. 애니매이션의 복사가 필요 NetMulticast RPC 를 사용한 데이터 복사 기존의 발사 함수외에 추가적인 매크로를 적용한 함수를 만든다.(함수매크로는 Server, Reliable 을 사용) 이때 선언정의후 CPP 파일에 정의된 함수에 _Implementation을 추가하도록한다. 일반함수로 사용할경우 값복사가 이루어지지않으며 컴파일이 불가능. 이후 추가적으로 멀티캐스트 호출용 함수도 만들어준다. 서버함.. 2024. 3. 4.