Home
Development Environment

VMap 제작하기

SDK를 사용해 플레이어들이 접속할 수 있는 맵을 만들 수 있습니다.
VMap은 VObject를 추가할 수 있고, VivenBehaviour를 사용해 별도의 로직을 수행할 수도 있습니다.

VObject 함께 빌드하기

VMap에 VObject를 추가하는 과정은 몇 가지 사항을 제외하면 VObject 빌드 과정과 동일합니다.
VMap 에 배치된 VObject는 ContentType을 Prepared로 설정해야 합니다. VMap에 포함된 VObject를 Prepared 오브젝트로 부릅니다. Prepared 오브젝트는 사용자가 제거할 수 없으며, VMap이 로딩될 때 함께 로딩됩니다. Prepared 오브젝트도 제거할 수 없다는 점을 제외하면 VObject 와 동일합니다.
Prepared 오브젝트에는 현재 ContentId가 존재하지 않습니다. Injection을 사용하거나 NetworkId 를 사용해 오브젝트를 확인해주세요

레벨 디자인

VMap의 자체 로직을 수행하는 매니저 클래스를 구현하고 싶은 경우 다음 내용들을 참고할 수 있습니다.

네트워크 동기화

VObject의 네트워크 동기화와 동일하게 RPC와 SyncTable을 사용할 수 있습니다. VMap은 추가적으로 서버에 Room 프로퍼티 테이블을 저장할 수 있습니다. Room 프로퍼티는 생성된 방마다 각각 존재하며 VMap들끼리 공유할 수는 없습니다.
Room 프로퍼티는 클라이언트와 독립적으로 존재하므로, 사용자가 맵을 나간 경우에도 데이터 저장, 동기화를 수행할 수 있습니다. Room 프로퍼티는 테이블 형태로 존재하기 때문에 많은 데이터를 적재하거나 잦은 변경이 일어날 경우 네트워크 부하가 생길 수 있습니다.
Room 프로퍼티는 데이터 무결성을 보장하지 않습니다. 데이터 변경 요청이 일어나면 네트워크 딜레이 등으로 인해 즉시 반영되지 않습니다. 프로퍼티 변경에 의한 로직이 존재한다면 값을 확인하는 과정을 거쳐야 합니다.

네트워크 이벤트

Viven은 방에 진입하거나 누군가 방에 진입하고 나갈 때에 맞추어서 기능을 구현할 수 있습니다.
onRoomJoined
onRoomLeave
onRoomUserJoined
onUserLeaveRoom
등의 이벤트 함수를 구현해 네트워크 이벤트를 사용할 수 있습니다.
자세한 내용은 를 참고해주세요

Room 프로퍼티 활용하기

다음 예제는 Room 프로퍼티를 활용해 다른 사용자의 접속에 따른 이벤트를 실행합니다.
본 예제는 SDK Sample Scene - Ui 스크립트 입니다.
-- 본 예제에서는 ButtonZiggler 오브젝트를 클릭하면 Shake 함수가 호출되어 Shake 효과를 줍니다. -- 또한 Shake 함수가 호출될 때마다 Shake 카운트를 증가시키고 Room Prop을 통해 Shake 카운트를 전달합니다. -- RoomProp은 다른 사용자들이 같은 Room에 접속하여 Shake 카운트를 확인할 수 있도록 합니다. local TargetTextTmp local count function awake() -- Shake 함수를 Button 오브젝트의 onClick 이벤트에 등록합니다. self:GetComponent(typeof(Button)).onClick:AddListener(Shake) TargetTextTmp = TargetText.gameObject:GetComponent(typeof(TMP_Text)) -- RoomProp을 통해 Shake 카운트를 전달하기 위해 callback을 등록합니다. Room.RegisterRoomPropChanged("Shake", onChangedShakeProp) count = tonumber(Room.GetRoomProp("Shake")) if(count ~= nil) then -- RoomProp을 통해 Shake 카운트를 전달받아 초기화합니다. ChangedShakeCount(count) else count = 0 -- Shake 카운트가 없을 경우 초기화합니다. Room.SetRoomProp("Shake", 0) end end ---@details Shake 함수는 Shake 효과를 주는 함수입니다. function Shake() self:DoShake(1, 100, 20) count = count + 1 Room.SetRoomProp("Shake", count) end ---@details RoomProp이 변경될 때마다 호출되는 함수입니다. function onChangedShakeProp(value) if(value == nil) then return end ChangedShakeCount(value) end ---@details Shake 카운트를 변경하는 함수입니다. function ChangedShakeCount(value) TargetTextTmp.text = "Shake Count: (" .. value .. ")" end
Lua
복사