EnJoyTheVR

Создавать VR Миры - просто!

Шаблон приложения для EnJoyTheVR.

Настройка проекта

1. AssetBundle и Сцена

  • Скачанный шаблонОбязательно используйте проект с GitHub.
  • Unity 2022.3.16Версия редактора.
  • СценаНазовите сцену именем игры (строчные буквы).
  • Важно: AssetBundle Укажите имя бандла в инспекторе. Это ID игры.
  • Объект spawn в месте появления.
AssetBundle Inspector

Настройка игрока

Добавьте префаб EVR.API на сцену.

UseDefaultPlayer

Стандартный персонаж с физикой.

UsesInteraction

Система VR-рук и хвата.

EVR API Prefab

Lua Скриптинг

CustomLuaLoader

Мост между Unity и Lua. Повесьте на любой объект.

  • CustomModeDirectory: Папка игры.
  • LuaScriptName: Имя файла.

Injections

Передача объектов Unity в Lua.

  • 1. Добавьте элемент.
  • 2. Name: Имя в Lua (напр. MyText).
  • 3. Value: Ссылка на объект (напр. TextMeshPro).
CustomLuaLoader

Inspector View

Жизненный цикл (Lifecycle)

function Start()
    print("Game Started!")
    local p = EVR.Player
end

function Update()
    -- Выполняется каждый кадр
end

function FixedUpdate()
    -- Выполняется с фиксированным интервалом (меньше нагрузка)
end

Система

EVR:LoadScene(name, keep)

Загрузка сцены из бандла.

EVR:LoadScene("Level2", true) -- true = аддитивно
EVR:CloseApp()

Выход в лобби.

OnExit()

Callback перед выходом.

Игрок

EVR.Player / EVR.PlayerHead

Доступ к объектам игрока.

local p = EVR.Player
p.transform.position = Vector3(0, 10, 0)
EVR:SetPlayerSpeed(mv, st)

Скорость движения.

EVR:DoJump()

Прыжок.

Ввод и Управление

VR Клавиатура

EVR:EnableKeyboard(inputField, transform)
Важно: TMP_InputField нужно передать через Injections.
EVR:EnableKeyboard(MyInput, nil)
EVR:DisableKeyboard()

Контроллер

Возвращают KeyCode для использования в Unity Input.

Кнопки

  • EVR:AKeyCode()
  • EVR:BKeyCode()
  • EVR:XKeyCode()
  • EVR:YKeyCode()

Курки

  • EVR:LKeyCode() // LB
  • EVR:RKeyCode() // RB
  • EVR:ZLKeyCode() // LT
  • EVR:ZRKeyCode() // RT

Стики

  • EVR:LStickButtonKeyCode()
  • EVR:RStickButtonKeyCode()
if CS.UnityEngine.Input.GetKey(EVR:BKeyCode()) then
    print("Button B Pressed")
end

Сохранения

EVR:Save(key, val)
EVR:Save("Lvl", 5)
EVR:Load(key, type)
local l = EVR:Load("Lvl", "int")

Мультиплеер

Photon Photon PUN 2

Настройка

Для использования функций Photon добавьте префаб EVRPhoton на каждую сцену. Для подключения к серверу используйте скрипт PhotonSetConnection.cs и укажите App Id Realtime из панели Photon Engine.

Вспомогательные скрипты (C#)

  • EVRPhotonObjSync.cs: Вешается на объекты, методы которых нужно синхронизировать.
  • EVRPhotonServerList.cs: Для создания списка комнат.
  • EVRPhotonServerPanel.cs: Элемент UI для списка комнат.

Комнаты и Соединение

EVRPhoton:CreateRoom(name, scene)

Создать комнату и загрузить уровень.

EVRPhoton:CreateRoom("Lobby", "Game")
EVRPhoton:JoinRoom(name, scene)

Подключиться к комнате.

EVRPhoton:JoinRoom("Lobby", "Game")
EVRPhoton:LeaveRoom(scene)

Покинуть комнату.

EVRPhoton:DisconnectFromMaster()

Отключиться от сети.

Объекты (Pool & Spawn)

EVRPhoton:RegisterInPool(name, destroy)

Регистрация префабов (должны быть в Resources). Вызывать в Start().

function Start()
    EVRPhoton:RegisterInPool("Cube")
    EVRPhoton:RegisterInPool("Gun")
end
EVRPhoton:Instantiate(name, pos, rot)

Создание сетевого объекта.

EVRPhoton:Instantiate("Cube", Vector3(0,0,0), Quaternion.identity)

Синхронизация (RPC)

EVRPhoton:Sync(obj, script, func, param)

Вызывает функцию на объекте у всех игроков. На объекте должен быть EVRPhotonObjSync.

EVRPhoton:Sync(pistol, "GunLogic", "Shoot", "")
EVRPhoton:SetOwnership(obj)

Передать владение объектом себе.

EVRPhoton:CheckIfMaster()

Обновить EVRPhoton.IsMaster.

Игрок

EVRPhoton.NickName

Получить никнейм.

EVRPhoton:SetNickName(str)

Установить никнейм.