CustomView 사용 방법
VivenCustomSyncView 와 VivenBehaviour 를 조합해 Transform, RigidBody 외의 임의 데이터를 네트워크 동기화하는 방법을 다룹니다.
VivenCustomSyncView (SDKCustomSyncComponent) 와 VivenBehaviour 를 사용해 커스텀 데이터 동기화를 구현할 수 있습니다.
VivenBehaviour 에서 선언된 변수는 각 클라이언트에서만 유효합니다. 모든 클라이언트에 상태를 동기화하려면 VivenCustomSyncView 를 통해 데이터를 직접 전송·수신해야 합니다.
동기화 이벤트
Sync 는 다음 이벤트들을 기반으로 동작합니다.
- initializeSync — 초기화 시 한 번 호출. 동기화할 데이터의 초기 상태를 구현합니다.
- sendSyncUpdate — 데이터를 서버로 전송할 때 호출. 동기화할 Lua 테이블을 반환합니다.
- receiveSyncUpdate(syncTable) — 서버로부터 데이터를 받을 때 호출. 테이블을 받아 로컬 상태에 반영합니다.
- sendSyncFixedUpdate —
sendSyncUpdate와 같지만 UnityFixedUpdate에서 동작. 물리 동기화에 사용합니다. - receiveSyncFixedUpdate —
receiveSyncUpdate와 같지만 FixedUpdate 에서 동작합니다.
예제 — Transform Position 직접 동기화
-- 오브젝트 초기화 시 호출
function initializeSync()
self.transform.position = Vector3(0, 0, 0)
end
-- 오브젝트의 소유권이 내 것일 때, 동기화할 데이터 테이블을 반환
function sendSyncUpdate()
return {
self.transform.position.x,
self.transform.position.y,
self.transform.position.z,
}
end
-- 내 것이 아닌 경우 서버에서 받은 데이터로 상태를 갱신
function receiveSyncUpdate(syncTable)
if syncTable == nil or #syncTable < 3 then return end
self.transform.position = Vector3(syncTable[1], syncTable[2], syncTable[3])
end
-- 소유권 요청
function requestOwnership()
SyncComponent:RequestOwnership()
end
-- 소유권이 나에게 있는지
function getIsMine()
return SyncComponent.IsMine
end
주요 Field
- luaBehaviour — 동기화를 수행할
VivenLuaBehaviour참조 - viewSyncType — 동기화 방식을 지정하는
SDKSyncType값