๐
2025-11-21
CurrentHitActor, LastHitActor ์ ์ฅ1. IInteractableInterface ํ์ธ ํ ์์ ฏ ํ์
// ์ด์ ์กํฐ ์ฒ๋ฆฌ
if (IsValid(LastHitActor.Get()))
{
if (LastHitActor->Implements<UIInteraction>())
{
IIInteraction* InteractionInterface = Cast<IIInteraction>(LastHitActor);
if (InteractionInterface)
{
InteractionInterface->HideInteractionWidget();
}
}
}
// ํ์ฌ ์กํฐ ์ฒ๋ฆฌ
if (IsValid(CurrentHitActor.Get()))
{
if (CurrentHitActor->Implements<UIInteraction>())
{
IIInteraction* InteractionInterface = Cast<IIInteraction>(CurrentHitActor);
if (InteractionInterface && InteractionInterface->CanInteract(this))
{
InteractionInterface->ShowInteractionWidget(this);
}
}
}
2. ํฝ์ ์์ดํ ์กํฐ ๊ตฌํ
FItemInstance ๋ฐ์ดํฐ ๋ณด์ (StaticDataID, CreationServerTime)Interact() ํธ์ถ ์ UTSInventoryMasterComponent::AddItem() ์ฐ๋3. ์ปจํ ์ด๋ ์กํฐ ๊ตฌํ
UTSInventoryMasterComponent ๋ณด์ Interact() ํธ์ถ ์ PlayerController์ HUD์์ ToggleContainer() ์คํEํค ์ํธ์์ฉ ์ ์คํ ์์น๊ฐ ์กํฐ๋ง๋ค ๋ฌ๋ผ์ผ ํ๋ ๋ฌธ์ :
AddItem()์ ์ธ๋ฒคํ ๋ฆฌ ๋ฐ์ดํฐ ์์ ์ด๋ฏ๋ก ์๋ฒ์์ ์คํ ํ์ToggleContainer()๋ UI ์กฐ์์ด๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์คํ ํ์๊ธฐ์กด ๋ฐฉ์์ผ๋ก๋ ๋ชจ๋ ์ํธ์์ฉ์ ServerInteract RPC๋ก ๋ณด๋ด๋ฉด ์ปจํ
์ด๋์์ HUD๋ฅผ ์ฐพ์ ์ ์๋ ๋ฌธ์ ๋ฐ์
1. ์ธํฐํ์ด์ค์ ์คํ ์์น ํ๋ณ ํจ์ ์ถ๊ฐ
// IInteractableInterface
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
bool RunOnServer();
2. ๊ฐ ์กํฐ์์ ์คํ ์์น ๋ฐํ
// ATSPickupItem - ์๋ฒ์์ ์คํํด์ผ ํจ
bool ATSPickupItem::RunOnServer_Implementation()
{
return true; // AddItem()์ ์๋ฒ์์ ์คํ
}
// ATSContainerActor - ํด๋ผ์ด์ธํธ์์ ์คํํด์ผ ํจ
bool ATSContainerActor::RunOnServer_Implementation()
{
return false; // ToggleContainer()๋ ํด๋ผ์ด์ธํธ์์ ์คํ
}
3. ์บ๋ฆญํฐ์์ ์คํ ์์น ๋ถ๊ธฐ
void ATSCharacter::OnInteract(const struct FInputActionValue& Value)
{
UE_LOG(LogTemp, Log, TEXT("e pressed"));
if (!IsValid(CurrentHitActor.Get()))
{
return;
}
if (CurrentHitActor->Implements<UIInteraction>())
{
IIInteraction* InteractionInterface = Cast<IIInteraction>(CurrentHitActor);
if (InteractionInterface && InteractionInterface->CanInteract(this))
{
if (InteractionInterface->RunOnServer())
{
ServerInteract(CurrentHitActor.Get());
}
else
{
InteractionInterface->Interact(this);
}
}
}
}
RunOnServer()๋ง ๊ตฌํํ๋ฉด ์๋์ผ๋ก ์ฌ๋ฐ๋ฅธ ์์น์์ ์คํ1. ์ธํฐํ์ด์ค ์ค๊ณ์ ์ ์ฐ์ฑ
RunOnServer() ํจ์ ํ๋ ์ถ๊ฐ๋ก ์๋ฒ/ํด๋ผ์ด์ธํธ ์คํ ๋ถ๊ธฐ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์๋ค.2. ๋ฉํฐํ๋ ์ด์ด ์ํคํ ์ฒ์ ๋ณต์ก์ฑ
3. ํ ์์ ์ ํจ์จ์ฑ