Choose your operating system:
Windows
macOS
Linux
여기서는 서버와 클라이언트 머신 사이에서 액터의 Replicates , 리플리케이트 옵션을 사용하여 액터가 나타나도록 (또는 나타나지 않도록) 하는 법을 보여드립니다. 인용된 두 가지 예제 중, Replicating Actors 예제는 액터에 리플리케이트 설정을 하는 법과, 그렇게 설정한 액터와 안한 액터 사이의 차이점을 보여드립니다. 두 번째 예제는 Switch Has Authority (스크립트를 실행하는 것이 서버인지 클라이언트인지 검사하는) 노드를 사용하여 액터가 나타나는 위치를 조절하고 동적으로 스폰하는 법을 보여줍니다.
액터 리플리케이트하기
이 예제에서는 시작용 콘텐츠 포함 블루프린트 삼인칭 템플릿 을 사용합니다.
액터에 리플리케이트 설정하는 방법과 리플리케이트 되는 액터와 되지 않는 액터 사이의 차이점은 다음과 같습니다.
-
Game/StarterContent/Blueprints 폴더 안의 Blueprint_Effect_Fire 에 우클릭 한 다음 복제 를 선택합니다.
-
전 단계를 반복하여 블루프린트 사본을 하나 더 만듭니다.
-
사본 중 하나의 이름을 Fire_NoReplicate 로, 다른 하나의 이름을 Fire_Replicate 로 변경합니다.
-
Fire_NoReplicate 블루프린트를 열고 버튼을 눌러 디테일 패널에서 Net Load on Client 체크를 해제합니다.
이 옵션 체크를 해제하면, 클라이언트에서는 맵이 로드될 때 액터가 자동으로 로드되지 않습니다. 리플리케이트 역시도 체크되어 있지 않기 때문에, 이 액터는 클라이언트 머신에서는 스폰된다 할지라도 나타나지 않습니다.
-
블루프린트를 컴파일 , 저장 후 닫은 뒤 Fire_Replicate 블루프린트를 엽니다.
-
버튼을 클릭하고 디테일 패널에서 Replicates (리플리케이트) 옵션을 체크합니다.
리플리케이트 를 체크하면, 이 액터가 클라이언트 머신에 리플리케이트 가능함을 나타냅니다. Net Load on Client 역시도 체크해 두면, 맵 로드시 액터도 자동으로 로드되어 클라이언트 머신에 표시됩니다. 리플리케이트 옵션이 쓰이는 곳은, 맵 로드 시점이 아니라 게임플레이 도중 일정 시점에 이 액터를 스폰하고자 한다면, 리플리케이트 옵션을 켜 두어야 액터를 스폰하라 했을 때 클라이언트 머신에서도 리플리케이트된 사본이 스폰됩니다.
-
블루프린트를 컴파일 , 저장 후 닫습니다.
-
콘텐츠 브라우저 에서 Fire_NoReplicate 블루프린트를 레벨에 끌어 놓습니다.
-
콘텐츠 브라우저 에서 Fire_Replicate 블루프린트를 레벨에 끌어 놓습니다.
-
플레이 버튼 옆의 아래 화살표를 클릭한 다음 플레이어 수 옵션을 2 로 변경합니다.
-
플레이 버튼을 클릭하여 에디터에서 플레이합니다.
에디터에서 플레이하여 새 클라이언트 창이 열릴 때, Fire_NoReplicate 블루프린트가 서버에는 나타나지만 클라이언트에는 나타나지 않는 것을 볼 수 있습니다. 하지만 Fire_Replicate 블루프린트는 위와 같이 서버와 클라이언트 양쪽에 나타납니다.
리플리케이티드 액터 동적으로 스폰하기
이 예제는 위의 액터 리플리케이트하기 예제에서 이어집니다.
서버/클라이언트에서 리플리케이션 을 사용하여 게임플레이 도중 액터를 동적으로 스폰하는 법은 다음과 같습니다.
-
레벨 뷰포트에서, Fire_Replicate 와 Fire_NoReplicate 액터를 레벨에서 삭제합니다.
-
모드 메뉴에서 모든 클래스 아래 타깃 포인트 를 두 개 끌어 레벨에 놓습니다.
-
타깃 포인트 하나의 이름을 No_Replicate 로, 다른 하나를 Replicate 로 변경하고, 월드 아웃라이너 에서 둘 다 선택합니다.
-
메인 툴바의 블루프린트 메뉴에서 레벨 블루프린트 를 엽니다.
-
레벨 블루프린트 에서 그래프에 우클릭 한 다음 2 개의 선택된 액터에 대한 레퍼런스 생성 옵션을 선택합니다.
-
그래프에 다시 한 번 우클릭 한 다음 Event Begin Play 노드를 검색 추가합니다.
Event Begin Play 노드를 사용하여 게임이 시작되면 스폰시키고 있기는 하지만, 게임플레이 도중 레벨에 액터를 스폰시키려면 다른 것을 사용해도 됩니다. 키 프레스 이벤트가 될 수도 있고, 액터 스폰을 호출하는 다른 유형의 다이내믹 이벤트가 될 수도 있습니다.
-
그래프에 우클릭 한 다음 Spawn Actor from Class 노드를 검색 추가하고 Class 를 Fire_Replicate 로 설정합니다.
-
전 단계를 반복하여 Spawn Actor from Class 노드를 하나 더 만든 다음 Class 를 Fire_NoReplicate 로 설정합니다.
-
노드를 아래와 같이 연결합니다.
-
파랑 Replicate 노드를 끌어놓고 Get Actor Transform 노드를 검색 추가합니다.
-
Get Actor Transform 노드를 Spawn Actor from Class 노드의 Spawn Transform 핀에 연결합니다.
-
파랑 No_Replicate 노드에 대해 전의 두 단계를 반복합니다 (결과는 아래와 같을 것입니다).
다음으로 Switch Has Authority (다른 말로 Authority Guard) 노드를 추가하여 스크립트를 실행한 곳이 Authority (서버)인지 Remote Machine (클라이언트)인지 확인합니다. 전형적으로 Authority 로 설정하여 플레이어의 생명력 감소나 점수 배분과 같은 게임플레이 중요 스크립트 실행은 서버에서만 가능하도록 합니다. 클라이언트에서 이와 비슷한 스크립트를 통한 치트 방지를 위해서입니다.
-
Event Begin Play 노드를 끌어놓고 Switch Has Authority 노드를 추가합니다.
Authority 가 자동으로 기본값이 되어 첫 Spawn Actor from Class 노드에 연결될 것입니다.
-
레벨 블루프린트 를 컴파일 하고 닫은 다음 에디터에서 플레이합니다.
서버에서 스크립트를 실행했으므로, 서버에서는 양쪽 화염 이펙트가 나타나는 반면 클라이언트에서는 리플리케이트 설정을 한 것만 나타납니다. 서버나 클라이언트 중 하나에서만 스폰시키고자할 때 유용하며, 보다 중요한 점은, Switch Has Authority 노드 뒤에 오는 스크립트를 (앞서 말한대로) 서버나 클라이언트에서 실행시킨다는 점입니다.
-
레벨 블루프린트 로 돌아가 Remote 핀을 끌어놓고 아래와 같이 연결합니다.
-
레벨 블루프린트 를 컴파일 한 다음 닫고 에디터에서 플레이합니다.
이제 Switch Has Authority 가 Remote 로 설정되어 있기에, 그 뒤의 스크립트가 서버 아닌 클라이언트에서만 실행되는 것을 볼 수 있을 것입니다. 예를 들어 플레이어가 대미지를 입을 때 적용되는 화면 이펙트같은 것이 있다 치면, Authority Guard 로 Remote 를 사용하면 그 이펙트가 스크립트를 실행하는 원격 클라이언트에서만 스폰되도록 할 수 있습니다.