현제의 현재이야기
[넥슨/MOD] 네트워크의 이해 본문
보통은 동기화 문제를 해결하기 위해서 다른 쪽도 바꿔주는 번거로운 작업을 진행하였으나 MOD에선 실행제어 라는 것이 있다.
property 실행제어
동기화는 서버 -> 클라이언트 단방향으로 진행
[sync] : 동기화 되는 property
[none] : 안되는 것
서버와 클라이언트
일반적으로 프로퍼티와 함수를 선언하면 서버와 클라이언트 각각 생성되고, 서로 독립되게 움직임.
MOD에서는 자동으로 동기화됨. 서버가 바뀌면 클라이언트가 바뀐다.(단방향 구조)
효율적인 실행 제어
원래는 서버: 효과음을 내시오 - > code47 -> 클라이언트 code-47 -> 효과음을 내시오
이렇게 인데 이것을 함수로 만들어버리면
서버 playsoundeffect() - > 클라이언트 playsoundeffect() 해버린다.
단 그럴 댄 Playsoundeffect()에는 if 서버면 클라이언트의 playeffectsound를 실행하라, elseif 클라이언트면 playeffectsound 처러 ㅁ두 개의 조건인 분기문을 사용해야 한다. 그렇지만 이는 효율적이지 않기에 MOD에는 각 함수마다 호출 및 실행공간을 설정 가능하다.
[ServerOnly]
void CallPlaySoundEffect()
{
self:PlaySoundEffect() -- 어떤 공간에서든 같은 공간의 함수를 호출하듯이 사용할 수 있다.
}
[client] --각 함수별로 어떤 공간에서 호출하고 실행할지를 설정할 수 있다.
void PlaySoundEffect()
{
--코드 작성 공간입니다.
}
function 실행 제어
function setting 들어가면 다음과 같은 setting을 할 수 있음.
client: 서버 -> 클라이언트, 서버와 연결된 클라이언트들에게 함수 요청
clientOnly: 클라이언테에만
server: 클라이언트 -> 서버, 서버 안에서 함수
serveronly: 서버 안에서만, 대부분의 로직
로직을 서버에서만 하는 이유 : 클라이언트에서 로직을 처리하고 서버에서 동기화 통신용으로만 사용하면 유저가 해킹을 한 결과가 모든 클라이언트들에게 전달되기 때문. -> 해킹에 취약한 상황
multicast: 양 쪽 실행. 그러나 이도 sever에서 client 방향으로 간다.
파라미터를 넘겨줄 수 도 있음.
프로퍼티 동기화
동기화가 안되면 다른 프로퍼티이다. ex) 스탯 컴포넌트의 hp가 줄면 서버만 줄고 클라이언트 프로퍼티에는 갱신이 되지 않는다.
동기화 또한 서버 -> 클라이언트로 진행
동기화는 약간의 시차가 발생. 동기화 됐을 때 발생하는 함수는 OnSyncProperty 함수
동기화 방법 : [sync] 되어 있으면 되고 있는거.
'MOD' 카테고리의 다른 글
[넥슨/MOD] 컴포넌트 활용 (0) | 2022.07.20 |
---|---|
[넥슨/MOD] Event와 컴포넌트 확장 (0) | 2022.07.19 |
[넥슨/MOD] 공동 월드 만들기/ 공동 월드 만들고 협업하기 (0) | 2022.07.17 |
[넥슨/MOD] 스크립트의 이해 (0) | 2022.07.16 |
[넥슨/MOD] 자주 사용하는 컴포넌트 (0) | 2022.07.15 |