1. 액터 리플리케이션 


- 액터가 리플리케이트 되면 서버에서 스폰될 떄, 나머지 클라이언트 전부에 전송된다
- 액터의 존재를 다른 머신에서도 알 수 있도록 함
- 그러나 리플리케이드 되지 않으면, 원격머신에서는 액터가 언제 스폰되었는지 알지 못함

 

리플리케이트가 되지 않아서, 클라이언트에서 보이지 안음

* 왼쪽에 액터는 리플리케이션 마킹이 되지 않기 떄문 ->  해결방법은 아래 그림 참고
* 리플리케이트 항목 체크하면 됨

BP -> 디테일 -> 리플리케이션 항목 

 

* 게임에 접속된 모든 머신과 네트워크로 연결되도록 하려면, 위를 체크되었는지 확인하는 게 좋다
* 체크를 하면 이 액터는 참가한 모든 머신에 리플리케이트 된다


Swutch Has Authority

* 위를 검사 하는 것으로 지금 블루프린트 스크립트를 실행한 것이 권위자 머신(서버)인지, 원격머신(클라이언트)인지
* 서버인지 클라이언트인지 바로 묻지 않는 이유는, 특수한 경우에 서버가 액터의 권위자가 아닌 상황이 있기 떄문
* 어느 한 오브젝트에 대한 권위자가 반드시 서버 인 것은 아니다

* 위 노드는 일종의 게이트로 사용할 수 있다. 어떤 게임플레이나 행위가 서버에서만 일어나게 할 것이냐, 아니면 클라이언트에서만 일어나게 할것인가

ex) HUD에다 액터를 추가하는 경우, 클라이언트에서만 스폰되는 것으로 서버에서는 존재조차 신경쓸 필요가 없으므로, 이러한 경우 클라이언트가 HUD에 대한 권위자가 된다. 왜냐하면 거기에 속해 있고, 다른 누구도 그에 대해 알거나 신경쓸 필요가 없기때문

 


원격머신 뒤에는 보라색으로 변하게 설정됨

 

 

서버에서는 권위자, 클라이언트에서는 원격머신 표시

 

* 서버냐 클라이언트냐에 따라 위 처럼 간단하게 처리 할 수 있따.


2. 변수 리플리케이션

노 변수, 변수 리플리케이션

 

* 서버만 알고 다른 사람은 전혀 신경쓸 필요가 없는 정보가 많을 수 있다. 그래서
* 액터의 특정 변수를 리플레키에션을 설정 가능함

* 서버 측에서는 2개다 동일한 속도로  HP가 감소함

* 클라이언트에서 노 변수 설정 된 것은 체력이 바로 0으로 됨
-> HP 값을 네트워크에서 처리되도록 설정하지 않았기 떄문이다

왼쪽 객체는 리플리케이션이 NONE, 우측 객체는 Replicated로 설정되어 있다.

 

* NONE : 기본값이며 변화를 안 알린다
* Replicated : 다른 머신 모두가 그 변화를 알 수 있도록한다
-> 설정이 되어 있으면,  변화가 다른 머신에 반드시 전달 되다는 보장이 있다
엄청난 양의 리플리케이션을 하는 경우에는 네트워크 지연(랙)이 발생할수 있다. 빠르긴 하지만 즉시 작업은 아니다

* RepNotify : Replicated키워드의 역활을 그대로 한다. 여기에 추가로 변수가 변할 떄, 누군가가 변경을 하면, 이에 대한 반응을 할 수 있는 기회를 준다. 함수를 호출하여 작업을 할 수 있는 기회를 얻는다

※ 한 프레임 내에 여러번 변경한 경우에는 감지하지 못한다.
※ 한 프레임에 값을 여러번 바꾸는 경우 전부 캡처되지 않는다. 같은 프레임 내 마지막에 가한 변경만 캡처된다
※ 프레임 끝에 리플리케이션 할지 결정할 떄, 시작과 끝 값이 같으면 클라이언트 머신에 알리지 말아야 하는 것

※ 클라이언트에서는 Replicated 변수 변경을 정말 하지 않는 것이 좋다. 변경을 하는 것은 서버에서만 하도록 하는 것이 좋으며, 그런 이후 변수 리플리케이션 시스템을 통해 클라이언트가 변화를 인지하도록 하는 것이 좋다


 

* 우측상단에 번개컴퓨터 아이콘 표시
* 서버에서 호출할 때만 작동한다고 표시된것
* 클라이언트에서 호출 할 수는 있지만, 아무 것도 하지 않을 것이다
* 실수를 하지 않도록 하기 위한 일종의 안전장치 이다. 서버에서만 사용할 수 있다고 보면 됨


* 우측 상단에 번개모니터 표시
* 이 시점 이후로 호출되는 것은 기본적으로 장식 / 시각 효과용이라는 뜻
* 게임플레이에 정말 중요한 작업 같은 것은 하지 않는다는 것을, 또는 서버에서만 일어나야 하는 것은 하지 않는다는 것을 뜻한다
* 이 표시가 있으면 서버는 이에 대해 신경을 쓸 필요가 없다

※ 데디케이티드 서버에서는 이 노드 다음에 오는 것들은 최적화의 일환으로 바로 무시해 버린다.
 앞으로 하는 모든 것들은 게임플레이에 영향을 끼치지 않으며, 데디케이티드 서버에서는 완전히 무시해도 된다.


RepNotify :
Replicated키워드의 역활을 그대로 한다. 여기에 추가로 변수가 변할 떄, 누군가가 변경을 하면, 이에 대한 반응을 할 수 있는 기회를 준다. 함수를 호출하여 작업을 할 수 있는 기회를 얻는다

 

SET w/ Notify

* SET w/ Notify 
* Streetlight Scalar 변수가 설정되어 있는데, 여기에 RepNotify 마킹을 해둬서 우리에게 알려준다
* 우측에 공2개 표시 -> Replicated 변수를 뜻한다
* 즉 한 눈에 Streetlight Scalar가 Replicated 변수임을 알 수 있다.
* 그리고 SET w/ Notify로도 RepNotify 임을 알 수가 있따.

* NONE -> RepNotify로 하면 위에 OnRep_ 구현가능 변수이름으로 된 함수를 자동 생성한다. 

자동생성된 함수

 

함수는 메시 색을 설정하는 내용

 

* 서버에서 이 변수가 변화되면, 서버에서 이 함수를 즉시 호출한다
* 스칼라 값이 변경이 감지 되면 위 함수가 호출이 되서 색을 바꾼다

* 무슨 일이 벌어진냐면, 이것을 설정할떄 서버에서도 바로 그 함수를 호출한다,
또한 클라이언트에서도 그 업데이트 알림을 받으면 바로 그 동일한 함수를 클라이언트에서 호출한다.

* 즉 클라이언트를 통해 업데이트가 전송되면, "내 값이 바뀌었은데, 색 바꾸어야 할거 같아" 하는 것이다

* 이는 게임플레이 관련 변화를 처리하는 정말 편리하고 강력한 방법이다, 클라이언트도 알아야 하는 시작 효과 연동 변화도 처리 할 수 있다. RepNotify 마킹을 해두면, 그에 대한 변화가 있을 떄 알림을 받아서, 그에 맞게 반응 할 수 있다

※ 리플리케이션은 C++을 통해 이루어지지, 블루프린트는 아니다. 노티파이 작동방식을 블루프린트에서는 살짝 다른데, 서버에서 이게 설정되면 이 함수를 자동호출한다는 점에서 다르다

※ C++에서 코딩하는 경우 중요한 내용인데, RepNotify 함수는 서버에서 자동 호출되지 않는다는 점이다. 필요하면 수동 호출해 줘야 한다. 블루프린트에서는 편의상 자동으로 호출되고 있다. 그냥 설정만 해주면 서버와 모든 클라이언트에서 자동 호출된다.

 

 

'Unreal > NetWork' 카테고리의 다른 글

4. 네트워크 연관성  (0) 2019.06.13
3. 함수호출 리플리케이션  (0) 2019.06.13
1. 네트워크 기초 (블루프린트 네트워크)  (0) 2019.05.17
언리얼 리플리케이션 개념도  (0) 2019.05.17

+ Recent posts