전체 글 112

[NBC-Final] 관전 연관성 문제 해결

문제점 및 원인 분석관전할 때 Spontaneous Actor가 보이지 않는 오류가 발생항상 안 보이는 것은 아니고 잠깐 보였다가 안 보이는 현상이 발생항상 안 보이는 것이 아니므로 네트워크 문제로 판단했음물체의 가시성을 확인하는 것은 연관성(Relevancy)이므로 연관성을 확인하기로 결정로그 분석LogAbyssDiverCharacter: Display: IsNetRelevantFor: BP_UnderwaterCharacter_C_0 / RealViewer: BP_ADPlayerController_C_1 / ViewTarget: BP_UnderwaterCharacter_C_0 / SrcLocation: X=0.000 Y=0.000 Z=0.000 / bIsNetRelevant: TrueLogAbyssDi..

작업 일지 2025.07.01

[NBC-Final] 관전 UI 구현

관전 진입 시에 기존 Player UI가 남아 있는 현상이 있었다. 관전 시에는 풀스크린 이펙트와 같은 Player HUD를 비활성화를 해야 한다. UnPossess 상황에서의 Visibility Update는 OnPossessedPawnChanged를 이용하기로 생각하고 있었다.우선은 로그를 확인하기로 했다.OnPossessedPawnChanged 로그[Host]LogAbyssDiverCharacter: Display: [Server] InitFromPlayerState/ NickName : KKSOO-HOME-BF980E894 / PlayerIndex : 0LogAbyssDiverCharacter: Display: [SERVER] AUnderwaterCharacter::OnPhysicsVolumeCh..

작업 일지 2025.06.23

[NBC-Fianl] 관전 기능 구현 - 관전 시작

관전 기능언리얼 엔진은 관전 기능을 기본적으로 지원한다. 관전 기능에 사용되는 Spectator Pawn 클래스는 Game Mode에서 구현이 되어 있다. 관전 기능을 실행할 때는 Player Controller에서 시작한다. Game Mode가 아니라 Player Controller에서 시작되는 이유는 관전 모드가 Local에서만 동작하기 때문이다.Spectator State 시작Spectator를 시작하는 함수는 StartSpectatorOnly 함수를 참고하면 된다. StartSpectatorOnly 함수는 현재 Player Controller를 관전만 하도록 허용하는 함수이다.void APlayerController::StartSpectatingOnly(){ ChangeState(NAME_S..

작업 일지 2025.06.23

[NBC-Final] 감정 표현 구현

구현 의도1인칭 시점에서 감정 표현을 구현했는데 1인칭 시점이라서 자기 자신은 감정 표현을 한 것을 확인할 수 없는 문제가 발생했다. 감정 표현에 리액션을 줄 필요가 있었고 오버워치의 감정 표현을 레퍼런스로 하기로 했다. 오버워치의 경우 1인칭 시점이지만 감정 표현을 하면 3인칭으로 변경되면서 플레이어가 자기 자신의 감정 표현을 확인할 수 있다.요구 사항감정 표현을 실행하면 3인칭으로 카메라 전환점프, 이동 등의 행동을 하면 감정 표현 취소설계감정 표현 조건 : 지상, 감정 표현 재생 중이 아님감정 표현 취소 조건 : 이동, 점프Timer를 통해서 카메라 TransitionCamera Arm의 Target Length를 조절해서 구현구현감정 표현 요청if (EnvironmentState == EEnvir..

작업 일지 2025.06.20

[NBC-Final] 래그돌 Actor 위치 동기화

기획 상 부활해서 원래 일어나는 부분은 따로 구현할 생각이 없었기 때문에 Actor 위치를 동기화할 생각은 없었다. 하지만, 이름표와 카메라가 Actor에 연결되어 있으므로 해당 부분을 구현해야 할 필요가 생겼다. 래그돌의 구현은 스켈레탈 메시가 물리 작용을 통해 움직이는 것이다. 이러한 구조에서 Actor가 스켈레탈 메시의 위치를 기준으로 이동하면 된다.구현스켈레탈 메시를 이용하기로 했으므로 특정한 기준이 필요하다. 캐릭터의 중심에는 pelvis가 존재하므로 pelvis를 기준으로 움직이기로 했다.void URagdollReplicationComponent::UpdateCapsuleTransform(){ int32 BoneIndex = SkeletalMesh->GetBoneIndex(Capsule..

작업 일지 2025.06.16

[NBC-Final] 래그돌 설정

구현 목적부활 기능이 추가되면서 시체를 운반해야할 필요가 생겼다. 시체를 운반하기 위해서는 물리를 활성화 시켜서 밧줄 같은 형식으로 묶어서 가져갈 생각이다. 그리고 래그돌 기능이 추가되면 시체에 대해서 상호작용이 가능해지면서 재미를 느낄 수 있는 요소라고 생각했다.래그돌 설정래그돌을 위해서는 매시의 물리를 활성화시키면 된다.GetMesh()->SetSimulatePhysics(true);GetMesh()->SetCollisionProfileName(TEXT("Ragdoll"));GetMesh()->SetCollisionResponseToChannel(ECC_Pawn, ECollisionResponse::ECR_Block);GetMesh()->SetEnableGravity(false);GetCapsuleC..

작업 일지 2025.06.16

[NBC-Final] Player Nick Name 설정 문제

문제 상황현재 나중에 들어온 플레이어의 Nick Name을 표시할 수 없는 문제가 있다. Nick Name을 설정하는 것은 OnPossess와, OnRep_PlayerController를 이용해서 구현했었다.Host 기준 문제 분석void UWorld::NotifyControlMessage(UNetConnection* Connection, uint8 MessageType, class FInBunch& Bunch){// ...case NMT_Join:{ if (Connection->PlayerController == NULL) { // Spawn the player-actor for this network player. FString ErrorMsg; UE_..

작업 일지 2025.06.12

[NBC-Final] 크로스헤어 트러블 슈팅

화면과 일치하지 않는 문제ProjectWorldLocationToScreen를 이용해서 구한 화면의 좌표로 위치를 지정했음에도 약간의 차이가 발생하는 문제가 있었다.Viewport에서의 보여지는 문제가 있는 것으로 생각됬고 일단은 SetPositionInViewport 함수를 이용해서 해결했다.보간 처리Spring Arm의 보간된 회전값을 이용해서 화면 좌표를 계산했다.const FVector CameraLocation = PlayerController->PlayerCameraManager->GetCameraLocation();const FRotator LaggedRotation = Character->GetMesh1PSpringArm()->GetSocketRotation(Character->GetMes..

작업 일지 2025.06.11

[NBC-Final] 크로스헤어 구현

데칼 기반으로 작동한다고 생각했으나 데칼 기반이 아니라 스크린 스페이스에서 동작하는 UI인 것이 판별되었다.이러한 UI는 라인 트레이스를 통해서 월드 지점을 구한 다음에 Screen Space에 투영해서 위치를 지정하는 방식이다. 무기의 Muzzle 위치에서 Front Vector로 라인 트레이스를 하고 충돌했을 경우는 Hit Location을 지점으로 하고 충돌이 없었을 경우는 End Location을 지점으로 Screen Space의 위치를 찾아서 UI를 배치했을 것이다.현재 프로젝트에서는 항상 무기를 들고 있지는 않기 때문에 이러한 방식은 사용하기 어렵다. 하지만, 이러한 효과는 수중에서의 저항을 표현하는데 굉장히 유용한 것이라고 생각한다. Turn In Place와 같은 유사 효과를 위해서 캐릭터..

작업 일지 2025.06.10

[NBC-Final] 데칼 크로스헤어 작성

구현 목적현재는 크로스헤어가 없기 때문에 무기를 겨냥하기가 어렵다. 무기가 없을 때도 상호작용을 하기 위한 크로스헤어가 없기 때문에 조준이 어려운 문제점이 있다.크로스헤어를 추가해서 이러한 조준 액션을 쉽게할 수 있게 하고 무기 발사 시에 동작을 쉽게 예측할 수 있도록 한다.요구 사항일정 거리 이내라면 목표 지점에 데칼 형식으로 두어서 레이저 포인터와 같은 동작을 하도록 한다.일정 거리 이상이라면 단순하게 화면 중앙에 크로스헤어를 표현한다.상호 작용이나 컷신 등의 일부 동작에서 크로스헤어가 필요 없을 수 있으므로 On/Off가 가능해야 한다.크로스헤어를 설정할 수 있어야 한다.자료 조사https://dev.epicgames.com/documentation/ko-kr/unreal-engine/decals-..

작업 일지 2025.06.10