본문 바로가기

공부259

[언리얼5] 범위공격(feat. 로켓런처) 멀티플레이 슈팅 게임 프로젝트를 만들며 단순한 사격뿐만아닌 수류탄, 로켓런처등 넓은 범위를 공격하기위한 무기를 만들며 방사선상 공격에 대하여 정리. 일반적인 공격에 대해서는 OnTakeAnyDamage 에 피격시 이벤트를 바인딩하여 사용. 이때 데미지를 주는 액터에서 충돌시 원형범위(Radial)에 있는 다른 액터들에게 범위에따라 다른 데미지를 전달할 수 있는 함수를 사용 할 수 있다. UGameplayStatics::ApplyRadialDamageWithFalloff 를 사용. 이때 매개변수는 적당히 설정 해주는데 만일 범위공격이 특정 액터에게 피해를 주지 않는다면 TArray() 매개변수를 해당 액터 클래스로 지정해 주도록 한다. 비어있는 배열을 넣을 경우 공격한 본인도 데미지를 입을 수 있다. 2024. 3. 20.
[언리얼5] 멀티플레이 시간 동기화 멀티플레이 프로젝트를 진행하며 서버와 클라이언트간의 시간차이를 줄이기 위해서는 클라이언트가 서버의 현재시간을 요청하면서 요청한 시간부터 서버에서 회신 하는 시간까지의 타임렉을 이용하여 클라이언트의 시간을 서버의 시간으로 동기화 한다. 클라이언트(IsLocalController)가 동기화를 요청 클라이언트에서 동기화를 요청하여 서버RPC를 사용하여 서버의 현재 시간을 확인 한다. 이후 서버는 해당 요청(함수)를 실행하는데 매개변수(클라이언트의 현재시간)를 확인해서 클라이언트에게 시간을 전달 한다. 클라이언트는 서버에서 받아온 시간과 현재 자신의 시간 차이의 값을 계산하고 해당 값을 반으로 나눈(클라이언트 에서요청 시작 ~ 서버가 회신하고 다시클라이언트에게 회신 하기때문에 왕복시간이아닌 편도시간만 계산)시간.. 2024. 3. 18.
[언리얼5] 개인 프로젝트 멀티플레이 Score 카운팅 테스트(+사망 이벤트 추가) 플레이어가 사망시 Material Dissolve 뿐만이아닌 추가적인 이펙트와 효과음을 더하기. 사이버펑크의 느낌을 중심으로 안들이드가 사망했을때 스캔하는 이펙트 + GTA의 wasted 문구를 출력하는 애니매이션을 추가. PlayerState 클래스를 C++로 만들어 다른 플레이어 격파시 Score를 추가하거나 플레이어가 사망하였을 경우 Death를 추가하는 점수 시스템을 생성. *서버 플레이어는 즉각적인 업데이카운팅이 가능하지만 멀티플레이의 업데이트는 기본 60프레임을 바탕으로 업데이트 하기때문에 서버보다 클라이언트의 업데이트가 조금 느린느낌이 있음. 향후 멀티플레이 진행시 일정점수를 먼저 도달한플레이어가 승리 이벤트 출력, 그외의 플레이어들은 패배 이벤트 출력 예정. 2024. 3. 15.
[언리얼5] 플레이어 사망 이펙트, 무기 드랍 플레이어가 사망하였을때 장착중인 현재의 무기를 그자리에 떨어뜨리도록 구현. 추가적으로 플레이어 사망시 단순하게 몽타주만 재생하지 않고 머티리얼에 Dissolve 효과를 추가하여 서서히 사라지도록 설정. Dissolve 노이즈 텍스처를 사용한 Dissolve의 기본 템플릿. 머티리얼 편집은 BP를 사용 머티리얼의 블렌드 모드 = Masked 에셋의 머티리얼의 이미시브컬러와 오파시티 마스크의 노드만 작성 Dissolve 파라미터, Glow 파라미터의 2개 파라미터값을 런타임중 변경 할 수있도록 작성 만일 플레이어로 사용하는 에셋의 머티리얼이 아래처럼 부위별로 나뉘어져있다면 각 부위별로 모두 머티리얼 인스턴스를 생성해서 Dissolve 로직을 적용 시켜줘야한다. 개인 코드 참고 플레이어 클래스에 커브를 사용한.. 2024. 3. 12.
[언리얼5] 플레이어 리스폰 플레이어가 사망시 일정시간의 타이머를 설정하여두고 랜덤한 위치에서 스폰 되는 기능 만들기. 타이머 세팅은 생략 게임모드 클래스에서 매개변수로 액터와 액터의 컨트롤러를 매개변수로 받아와 리스폰 기능을 구현. AActor 클래스를 상속받는 플레이어는 Reset 함수와 Destroy 함수를 사용 할 수 있다. Reset 함수는 빙의상태를 해제하며 컨트롤러를 유지한다. 이후 Destroy를 진행해야 플레이중인 플레이어가 게임에서 벗어나지 않는다. 리스폰시 주의해야할점은 플레이어가 다수 있거나 동시에 스폰되었을때 같은위치에 스폰될 경우 콜리전이 겹치게되면 기본설정은 플레이어를 간혹 스폰하지 않는 경우가 있다. 때문에 SpawnCollisionHandleingMethod 값을 AdjustIfPossibleButAl.. 2024. 3. 11.
[언리얼5] 콜리전 커스텀 채널 생성하기(C++) 엔진에 기본적으로 마련되어져있는 충돌 채널 외 원하는 채널을 생성할 수 있습니다. 오브젝터 채널 생성 프로젝트 세팅 > 엔진-콜리전 > 새 오브젝트 채널 생성 을 통하여 원하는 채널을 생성해 주도록 합니다. 테스트로 스켈레탈 메시 전용 채널을 생성. 매크로 생성하기 C++ 프로젝트의 헤더 파일에 매크로를 생성 합니다. 매크로는 단순하게 ECC_GameTraceChannel1을 사용자지정으로 쓸 것이지만 이름을 좀더 명확하게 하기 위하여 생성한 것입니다. 예시로 제 프로젝트는 SKH_MultiShooting 이라는 프로젝트이기때문에 SKH_MultiShooting.h 에 매크로를 추가하고, 이후 해당 채널을 사용하기 위한 클래스에 헤더를 선언한 후 사용이 가능합니다. 엔진의 설명에 있는 것처럼 커스텀 채널.. 2024. 3. 8.