728x90
플레이 > 멀티플레이 옵션에서 플레이어 수를 2로, 넷 모드를 'Play As Listen Server'로 변경하세요
실행하면 플레이어 2명이 보입니다. 다른 플레이어를 조종할 수 있는 애디터 창도 함께 뜹니다.
Server, Client 구분하기
움직이는 액터 코드 참고 : https://ashen99.tistory.com/149
더보기
void AMovingPlatform::Tick(float DeltaTime)
{
if (HasAuthority()) // 서버여부확인
{
Super::Tick(DeltaTime);
FVector Location = GetActorLocation(); // Actor의 위치를 FVector 유형 변수에 저장
Location += FVector(50 * DeltaTime, 0, 0); // Actor의 위치를 초당 X축 방향으로 50cm만큼 이동
SetActorLocation(Location); // 위치 업데이트
}
}
HasAuthority : Tick뿐만이 아니라 Actor 어느 곳에나 있을 수 있는 메소드; 자신이 서버인지 여부 반환
서버인 플레이어의 창에서만 Actor가 이동합니다.
클라이언트에서는 Actor가 제자리에 머물러 있는 것으로 보이지만 실제로 는 이동한 상태여서 서버에서 이동한 위치에서만 물체가 있는것으로 작용한다.(= 플레이어가 Actor위에 올라갈 수 없고 플레이어가 Actor를 관통할 수 있습니다.)
실제로 서버에서만 이동하지만 클라이언트에 서버에서 이동하는 Actor의 레플리케이트를 보여주기
//.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/StaticMeshActor.h"
#include "MovingPlatform.generated.h"
UCLASS()
class UDEMY_CPPMULTIPLAY1_API AMovingPlatform : public AStaticMeshActor
{
GENERATED_BODY()
public:
AMovingPlatform();
virtual void BeginPlay() override; // Tick 위에 적기
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere)// 코드말고 앤진에서도 속도 설정 가능
float Speed = 100;
};
//.cpp
#include "MovingPlatform.h"
AMovingPlatform::AMovingPlatform()
{
PrimaryActorTick.bCanEverTick = true;
SetMobility(EComponentMobility::Movable);
}
void AMovingPlatform::BeginPlay()
{
Super::BeginPlay();
if (HasAuthority()) {
SetReplicates(true);
SetReplicateMovement(true);
}
}
void AMovingPlatform::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (HasAuthority())
{
FVector Location = GetActorLocation();
Location += FVector(Speed * DeltaTime, 0, 0);
SetActorLocation(Location); // 위치 업데이트
}
}
'UNREAL > Unreal Study' 카테고리의 다른 글
움직이는 액터 (0) | 2024.05.07 |
---|---|
cmd창에서 UE 실행 (0) | 2024.05.07 |
외부 프로그램 화면 가장 앞or 뒤로 옮기기 (0) | 2024.03.17 |
언리얼로 만든 프로그렘 전체화면으로 만들기 (0) | 2024.03.17 |
탐색창에서 파일 선택해 불러오기, 저장위치 정하기 (0) | 2024.03.17 |