[UE5] 크로스헤어 Crosshair

목차
Crosshair
MainPlayerController
새 C++ 클래스 - PlayerController - MainPlayerController 생성


BP_PlayerController

MainHUD
새 C++ 클래스 - HUD - MainHUD 생성

BP_MainHUD


BP_MultiplayerGameMode 설정

Crosshair 방향과 Muzzle 방향 일치시키기
문제상황
문제상황
Crosshair가 가르키는 방향과 Muzzle이 가르키는 방향이 다르다.
FTransform MuzzleTipTransform = EquippedWeapon->GetWeaponMesh()->GetSocketTransform(FName("MuzzleFlash"), ERelativeTransformSpace::RTS_World); FVector MuzzleX(FRotationMatrix(MuzzleTipTransform.GetRotation().Rotator()).GetUnitAxis(EAxis::X)); DrawDebugLine(GetWorld(), MuzzleTipTransform.GetLocation(), MuzzleTipTransform.GetLocation() + MuzzleX * 1000.0f, FColor::Blue); DrawDebugLine(GetWorld(), MuzzleTipTransform.GetLocation(), BaseCharacter->GetHitTarget(), FColor::Red);

해결방안
오른손의 회전(RightHandRotation)을 적용한다.
FTransform RightHandTransform = EquippedWeapon->GetWeaponMesh()->GetSocketTransform(FName("Hand_R"), ERelativeTransformSpace::RTS_World); // 오른손 소켓의 회전, 비율, 위치값을 담아준다. RightHandRotation = UKismetMathLibrary::FindLookAtRotation(RightHandTransform.GetLocation(), RightHandTransform.GetLocation() + (RightHandTransform.GetLocation() - BaseCharacter->GetHitTarget())); FTransform MuzzleTipTransform = EquippedWeapon->GetWeaponMesh()->GetSocketTransform(FName("MuzzleFlash"), ERelativeTransformSpace::RTS_World); FVector MuzzleX(FRotationMatrix(MuzzleTipTransform.GetRotation().Rotator()).GetUnitAxis(EAxis::X)); DrawDebugLine(GetWorld(), MuzzleTipTransform.GetLocation(), MuzzleTipTransform.GetLocation() + MuzzleX * 1000.0f, FColor::Blue); DrawDebugLine(GetWorld(), MuzzleTipTransform.GetLocation(), BaseCharacter->GetHitTarget(), FColor::Red);

오른손의 회전값을 구한다.
- 오른손(hand_r)에서 충돌지점(HitTarget)으로 향하는 벡터의 회전값을 구한다.
시작 위치 벡터(=오른손 위치): RightHandTransform.GetLocation()
충돌 지점을 향하는 벡터: RightHandTransform.GetLocation() + (RightHandTransform.GetLocation() - BaseCharacter->GetHitTarget())
시작위치를 맞춰야 하므로 시작위치 + (RightHandTransform.GetLocation() - BaseCharacter->GetHitTarget())
Animation Blueprint


Transform Bone 적용 후에 FABRIK를 적용한다.
일치시켜준 후 모습

'⭐ Unreal Engine > UE Multiplayer FPS TPS + ListenServer' 카테고리의 다른 글
[UE5] 무기 시스템 만들기(무기, 발사체 타입무기, 발사체) (0) | 2023.09.27 |
---|---|
[UE5] Net Update Frequency 수정하기 (0) | 2023.09.27 |
[UE5] 무기 줍기 - RPC 고려하기 (0) | 2023.09.21 |
[UE5] 플레이어 Role 머리 위에 띄우기 (0) | 2023.09.18 |
[UE] Multiplayer 11: Menu Subsystem 수정하기 (0) | 2023.07.17 |
댓글
이 글 공유하기
다른 글
-
[UE5] 무기 시스템 만들기(무기, 발사체 타입무기, 발사체)
[UE5] 무기 시스템 만들기(무기, 발사체 타입무기, 발사체)
2023.09.27Projectile 방식의 무기와 Hit Scan 방식의 무기는 동작 원리에 따라 크게 차이가 있다. Projectile 방식의 무기는 발사체(Projectile)를 생성하고, 이 발사체가 일정 속도로 움직이며 목표물에 도달할 때까지 시간이 필요하다. Hit Scan 방식의 무기는 "즉시적인" 충돌 감지 메커니즘을 사용한다. 목차 Component 구조 만들기 CombatComponent CombatComponent.h더보기 CombatComponent.cpp더보기 Q. UFUNCTION(Server, Reliable)void ServerFire(const FVector_NetQuantize& TraceHitTarget); 와 같이 서버에 TraceHitTarget을 보내는 이유는?… -
[UE5] Net Update Frequency 수정하기
[UE5] Net Update Frequency 수정하기
2023.09.27Net Update Frequency는 네트워크 오브젝트가 얼마나 자주 업데이트되어야 하는지를 설정하는 변수다. 이 값은 초당 업데이트 수를 결정한다.예를 들어, "Net Update Frequency"가 10으로 설정된 경우, 해당 오브젝트는 초당 최대 10번까지 서버에 의해 클라이언트에게 업데이트 된다. 목차 Net Update Frequency 수정하기 Net Update Frequency는 네트워크 오브젝트가 얼마나 자주 업데이트되어야 하는지를 설정하는 변수다. 이 값은 초당 업데이트 수를 결정한다. 예를 들어, "Net Update Frequency"가 10으로 설정된 경우, 해당 오브젝트는 초당 최대 10번까지 서버에 의해 클라이언트에게 업데이트 된다. 높은 업데이트 빈도는 실시간 동기화에 도… -
[UE5] 무기 줍기 - RPC 고려하기
[UE5] 무기 줍기 - RPC 고려하기
2023.09.21목차 무기 줍기 BaseCharacter BaseCharacter.h더보기#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "BaseCharacter.generated.h"UCLASS()class MULTIPLAYER_API ABaseCharacter : public ACharacter{ GENERATED_BODY()public: ABaseCharacter(); virtual void Tick(float DeltaTime) override; virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override… -
[UE5] 플레이어 Role 머리 위에 띄우기
[UE5] 플레이어 Role 머리 위에 띄우기
2023.09.18목차 플레이어 Role 머리 위에 띄우기 Travel in Multiplayer 게임에 입장한 플레이어가 Server쪽인지 Client쪽인지 구분해야 한다.코드를 구현할 때 RPC를 고려하여야 한다. OverheadWidget OverheadWidget.h더보기#pragma once#include "CoreMinimal.h"#include "Blueprint/UserWidget.h"#include "OverheadWidget.generated.h"UCLASS()class MULTIPLAYER_API UOverheadWidget : public UUserWidget{ GENERATED_BODY()public: UPROPERTY(meta = (BindWidget)) class UTextBlock* D…
댓글을 사용할 수 없습니다.