프로젝트 (21) 썸네일형 리스트형 VR 낚시 기능 구현 VR 프로젝트를 진행하면서 최대한 모션 컨트롤을 활용한 컨텐츠를 만들기로 했다. 그 중 낚시는 다른 버튼을 사용하지 않고 손의 움직임 만으로 구현하여 직관적인 컨텐츠 체험 제공을 목표로 하였다. 아래 사진은 사용하는 모션 컨트롤러의 위치와 머리의 위치를 조정하여 손을 위에서 아래로 내렸을 경우 캐스팅하는 로직 캐스팅을 시작하며 낚시줄이 날라가는 때에 미끼를 생성해 CableComponent 에 부착한다. 이 미끼는 BP_Lake 와 오버랩되었을 때 물고기가 다가올 TargetLocation 이 된다. 미끼와 가장 가까운 물고기를 찾고 미끼로 다가가게 만든다. 상태를 미끼 찾기 상태로 변경 시키고 그에 따라 물고기는 미끼로 이동한다. 미끼에 물고기가 닿으면 물고기는 탈출하기 위한 함수를 실.. 괴물 플레이어 캐릭터 저주에 의해서 플레이어가 괴물로 변했을 때 사용하는 CharacterClass 1. 공격 시 애니메이션 동기화 공격 버튼을 눌렀을 때 ServerRPC -> MulticastRPC 로 애니메이션을 모든 클라이언트에서 실행하여 동기화 공격 애니메이션의 끝 부분에 AnimNotify 를 실행하여 OnNotifyAttack 함수를 호출로컬 클라이언트 일 때 BoxTrace 로 공격에 대한 충돌 처리 후ServerRPC_OnSuccessHit 호출하여 충돌처리에 대한 동기화 시작 서버에서 MulticastRPC 로 데미지 계산을 모든 클라이언트에서 실행하여 총돌 처리 동기화 2. 데미지를 받을 시에 상태 동기화 데미지를 받으면 TakeDamage 를 호출하여 공격 무기에 따라 스턴 혹은 사망 함수 호출.. 사람 플레이어 캐릭터 사람 플레이어 캐릭터에서 맡은 역할과 구현한 기능을 정리. 저주 옮기기와 쿨타임 적용 & 스테미나와 퀵슬롯에 픽업 아이템 이미지 넣기 등에 대해해당 캐릭터를 소유한 클라이언트에서만 적용되도록 설계 1. 픽업할 아이템과 저주를 옮겨 받을 플레이어를 선택하는 함수설명 : 박스 콜리전에 액터가 오버랩 되었을 때 아이템 & 플레이어라면 각각의 TSet 자료구조에 저장한다.그 중 플레이어 카메라와 가장 가까운 액터를 최종 선택된 액터로 선택하고 해당 아이템을 픽업 가능하고 플레이어에게는 저주를 넘겨 줄 수 있다. 2. 아이템 줍기 & 내려놓기 및 달리기 MaxWalkSpeed 동기화아이템 줍기와 내려놓기에 사용되는 함수들 PickUpDropDown 함수로 먼저 서버에서 해당 플레이어가 아이템을.. 언리얼 GPU 시각화 툴을 이용한 최적화 컴퓨터 스펙CPU : Intel i5 - 12500RAM : 32GBGPU : RX 6600 문제 상황레벨 에셋을 구매하여 사용하였는데 위와 같은 스펙의 컴퓨터에서 프레임 드랍이 심하게 생겼다.stat FPS, sta UNIT 커맨드로 프레임과 GPU Time 을 확인했더니 Draw 와 GPU Time 에서 비용이 크게 발생하는 것을 확인했다. 정확하게 어느 부분에서 비용이 발생하는지 확인하기 위해 언리얼 에디터에서 제공하는 GPU 시각화 툴을 활용하였다.단축키 : Shift + Ctrl + , 확인 결과 ShadowDepths 의 RenderVirtualShadowMaps 에서 시간이 크게 걸리는 것을 발견했다.19.85ms 의 비용이 발생한다. RenderVirtualShadowMaps 에서 VS.. 피직스 머터리얼을 이용한 사운드 변경 프로젝트에서 사용하는 레벨에는 잔디가 깔려있는 바깥과 나무 바닥으로 되어 있는 호러 멘션이 존재한다. 발걸음에 대한 소리를 출력할 때에 잔디와 나무에 따라 다르게 소리를 내도록 만들었다. 1. 프로젝트 셋팅에서 Surface 설정으로 Grass 와 Wood 를 추가하고 각 표면에 맞는 피직스 머터리얼들을 생성한다.2. 폴리지 모드에서 사용된 폴리지 레이어를 확인하고 원하는 피직스 머터리얼을 설정한다.3. 멘션에 나무 바닥 메쉬들에도 Wood 피직스 머터리얼을 설정한다. 4. 플레이어가 움직일 때 걷는 순간 마다 AnimNotify 로 아래로 라인트레이스하고 HitActor 의 Surface 마다 사운드를 교체한다. 컨트롤러 플레이어 캐릭터 빙의 변경 - (사람, 몬스터, 관전자) 게임 Pollute 는 플레이어가 사람, 몬스터, 관전자 3가지 캐릭터를 사용한다.컨트롤러는 3가지 캐릭터에 대한 ChangePossess 를 진행해야한다. 구현하면서 배운 것과 놓친 부분들1. Possess/UnPossess 는 항상 Server 에서 진행한다.2. 리플리케이트 되어 있는 액터의 생성과 파괴가 서버에서 이루어진다면 동기화된다.3. 클라에서는 캐릭터 생성하면서 Possess 시 Beginplay에서 컨트롤러를 정상적으로 가져올 수 있지만 Server 에서는 안된다. 안전하게 PossessedBy 함수를 사용한다.4. 사람이 몬스터로 변한다면 PlayerHUD 를 Off 해야하며 만약 아이템을 들고 있다면 Detach 해야한다.5. 몬스터로 변했다면 다시 무작위로 남아있는 사람 플레이어에게.. 플레이어 블렌드 스페이스 변경 & 속도 동기화 - 스테미나 블렌드 스페이스사람 캐릭터의 움직임을 좀 더 자연스럽게 바꾸기 위해 블렌드 스페이스를 추가하였다.1인칭 게임을 제작 중이기 때문에 Strafe 형식으로 만들었다. @ . 리플리케이트를 이용한 동기화라면 Server 에서 변수나 객체를 바꾸어주어야한다.@ . 액터의 RPC 호출에 가장 중요한 것은 Owner 이다. 그리고 소유권을 가질 수 있냐이다. 속도 동기화속도 동기화 시 설계가 다른 방법이 충분히 있을 것 같긴한데 일단 구현한대로 두어야할듯. Replicated : RPC 구현된 속도 동기화 : MaxWalkSpeed 를 조절하고 모든 서버/클라가 이를 동기화한다.기본 움직임에는 WalkSpeed 값으로 설정되지만 Shift 를 누르면 RunSpeed 로 설정 되어야 한다. 기본적으로 MaxWal.. 저주 객체를 이용한 동기화 프로젝트 중 저주 및 몬스터 동기화에 대한 로직을 정리. 저주 1. 사람 플레이어들에게 랜덤하게 적용.2. 플레이어가 죽거나 괴물이 되면 다시 랜덤하게 플레이어에게 적용3. 저주 적용 상태의 플레이어는 다른 사람에게 저주 넘기기 가능4. 저주가 걸린 로컬 플레이어에게만 개별적인 UI 보이기 저주 적용 시점과 옮기기까지 과정1. 저주 객체를 GameState 에서 관리했다. GameState 는 각 pc 별로 1씩 존재 가능하기 때문.GameState 에서는 무작위로 사람 플레이어를 선택 및 저주를 적용하여준다.이 함수는 서버에서만 실행되므로 밑에 호출되는 함수들 또한 서버에서만 호출된다. 2. 저주가 시작되기 때문에 저주 객체는 자신을 가지고 있는 Owner 캐릭터를 설정한다.해당 함수도 서버에서 실.. 이전 1 2 3 다음