SDKCustomSyncComponent와 VivenBehaviour를 사용해 CustomView를 구현할 수 있습니다.
VivenBehaviour에서 선언된 변수들은 각 클라이언트에서만 사용됩니다. 모든 클라이언트에서 상태를 동기화하기 위해서는 SDKCustomSyncComponent를 사용해 데이터를 동기화해야 합니다.
Sync는 다음 이벤트들을 기반으로 동작합니다.
•
initializeSyncVObject
◦
초기화 시에 호출됩니다. 동기화하려는 데이터의 초기작업을 구현해 주세요.
•
sendSyncUpdate
◦
데이터를 서버로 전송할때 호출됩니다. 해당 구현을 통해 동기화 할 데이터를 설정해 주세요.
•
receiveSyncUpdate
◦
서버로부터 데이터를 받을때 호출됩니다. 해당 구현을 통해 동기화된 데이터를 처리해 주세요.
•
sendSyncFixedUpdate
◦
데이터를 서버로 전송할때 호출됩니다. sendSyncUpdate와 다른 점은 Unity의 FixedUpdate 이벤트 위에서 작동합니다. Physic적인 동기화에 사용할 수 있습니다.
•
receiveSyncFixedUpdate
◦
서버로부터 데이터를 받을때 호출됩니다. receiveSyncUpdate와 다른 점은 Unity의 FixedUpdate 이벤트 위에서 작동합니다. Physic적인 동기화에 사용할 수 있습니다.
각 이벤트 함수를 통해 데이터 동기화 시 행동을 구현할 수 있습니다.
예제는 다음과 같습니다.
-- 본 예제는 간단한 Transform Position 동기화 예제입니다.
--@details 오브젝트 초기화 시에 불리는 함수입니다.
function initializeSync()
self.transform.position = Vector3(0, 0, 0)
end
---@details 오브젝트의 소유권이 내것일 때 동기화 하고 싶은 Table을 리턴하면 됩니다.
function sendSyncUpdate()
-- 현재 transform position을 동기화하기위하여 테이블 리턴
local syncParam = {self.transform.position.x, self.transform.position.y, self.transform.position.z}
return syncParam
end
---@details 오브젝트가 내것이 아니면 동기화 받은 데이터 처리 로직을 작성 하시면 됩니다.
function receiveSyncUpdate(syncTable)
if (syncTable == nil or #syncTable < 3) then
return
end
-- 동기화 받은 데이터로 transform 업데이트
self.transform.position = Vector3(syncTable[1], syncTable[2], syncTable[3])
end
---@details 소유권을 요청함
function requestOwnership()
SyncComponent:RequestOwnership()
end
---@return boolean
---@details 소유권이 나에게 있는지를 반환함
function getIsMine()
return SyncComponent.IsMine
end
Lua
복사
Fields
luaBehaviour
동기화를 수행할 LuaBehaviour입니다.
public VivenLuaBehaviour luaBehaviour
Field Value
viewSyncType
동기화 방법에 대한 타입입니다.
public SDKSyncType viewSyncType