===== Туториал: подключение к платформе [Лямбда-Мю 3 + Unreal Engine] =====
Unreal Engine - написанный на языке C++ движок, который позволяет создавать проекты для большинства операционных систем и платформ. Может выступать как визуализатор для платформы Лямбда-Мю 3.
==== Репозитарий ====
Файловая структура тестового экземпляра платформы представлена ниже.
Базовый проект Unreal Engine (описание ниже) и скрипты тестового экземпляра платформы находятся в репозитарии [[https://gitlab.com/lambda-mu/lm.ver3/lm3.examples/godot.mentor|lm3.examples/ue.connect]].
Чтобы запустить платформу скачайте бинарный файл и необходимые библиотеки из репозитария [[https://gitlab.com/lambda-mu/lm.ver3/lm3.engine.ce|lm3.engine.ce]] и скопируйте в корень тестового экземпляра платформы.
==== Базовый проект ====
Базовый проект состоит из одного Blueprint класса (LM3DataBP) и его базового C++ класса (LM3Functions). Класс предназначен для представления данных в формате Лямбда-Мю 3, а так же упаковки/распаковки данных в формат Лямбда-Мю 3 для обмена по сети.
В проекте для передачи данных используется плагин ObjectDeliverer.
Так же в проект входит Blueprint класс LM3DataTester, при помощи которого можно протестировать связь с платформой Лямбда-Мю 3 и посмотреть пример работы с LM3DataBP.
==== Добавление в проект ====
Для того, чтобы скопировать модуль Лямбда-Мю в свой проект, необходимо:
* иметь проект типа C++
* создать новый C++ класс с именем LM3Functions и базовым классом Blueprint Function Library
* скопировать функционал класса из базового проекта
* выполнить Migrate Assets содержимого папки Content/Lm3 (LM3DataBP, LM3DataTester, LM3DataType) из базового проекта
* добавить LM3DataTester в пустой уровень
* запустить платформу Лямбда-Мю 3
* скомпилировать и запустить проект
==== Тестовый экземпляр платформы Лямбда-Мю 3 ====
=== Файловая структура ===
{{ :lm3:ce:ue_connect_files.png?direct& }}
=== Взаимосвязи ===
Объекты основной логической машины:
* TCPserver tcps : подключение и передача данных клиентам
* DataPack dp : запаковка / распаковка данных в формат платформы
* Timer timer : отправка тестового сообщения
По старту машины активируется таймер и раз в секунду отправляется тестовое сообщение. Логируются тик таймера, подключение, отключение клиента.
=== Скрипты ===
**main / start.lua **
lm3:LoadLibrary( {Alias = "sys", FileName = "lm3system"} )
lm3:CreateLObject( { LibAlias = "sys", Type = "TCPServer", Name = "tcps" } )
tcps:SetAttr("Port", lmconf.TCPPort)
lm3:CreateLObject( { LibAlias = "sys", Type = "DataPack", Name = "dp" } )
lm3:CreateObject( { Type = "Timer", Name = "timer" } )
timer:SetAttr("Interval", 10000)
timer:DeferEvent("DoEnable", true)
timer:AddHandler("OnTick", function (o, ev)
lm3:Log("Tick")
local data = dp:DoPack({ Obj1 = { "str1", "str2", "str3" }, Obj2 = { Attr1 = "SomeAttr1", Attr2 = "SomeAttr2" }, Obj3 = 3.14 })
tcps:DoSend( { Tag = 1, Data = data } )
lm3:Log("Data:"..lm3:BytesToHex(data))
end)
tcps:AddHandler("OnConnect", function (o, ev)
lm3:Log("Connected")
end)
tcps:AddHandler("OnDisconnect", function (o, ev)
lm3:Log("Disconnected")
end)
=== Логи ===
**UE **
[2020.12.08-16.23.55:602][215]LogBlueprintUserMessages: [LM3DataTester_2] Connected
[2020.12.08-16.24.05:246][667]LogBlueprintUserMessages: [LM3DataTester_2] Incoming...
[2020.12.08-16.24.05:246][667]LogBlueprintUserMessages: [LM3DataTester_2] B4 00 00 00 80 00 00 00 03 00 00 00 04 00 00 00 4F 62 6A 31 38 00 00 00 00 01 00 00 03 00 00 00 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 31 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 32 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 33 04 00 00 00 4F 62 6A 32 44 00 00 00 80 00 00 00 02 00 00 00 05 00 00 00 41 74 74 72 31 11 00 00 00 40 00 00 00 09 00 00 00 53 6F 6D 65 41 74 74 72 31 05 00 00 00 41 74 74 72 32 11 00 00 00 40 00 00 00 09 00 00 00 53 6F 6D 65 41 74 74 72 32 04 00 00 00 4F 62 6A 33 0C 00 00 00 20 00 00 00 1F 85 EB 51 B8 1E 09 40
[2020.12.08-16.24.05:246][667]LogBlueprintUserMessages: [LM3DataTester_2]
[2020.12.08-16.24.05:246][667]LogBlueprintUserMessages: [LM3DataTester_2] 04 00 00 00 FF FF FF FF
[2020.12.08-16.24.05:246][667]LogBlueprintUserMessages: [LM3DataTester_2]
**LM_main.log **
[2020-12-08 19:23:55][INFO:LMInit][Start logic machine v3.3(Build:561) ----------------------------------]
[2020-12-08 19:23:55][TRACE:LMInit][Create library object: tcps]
[2020-12-08 19:23:55][TRACE:LMInit][Create library object: dp]
[2020-12-08 19:23:55][TRACE:LMInit][Create object: timer]
[2020-12-08 19:23:55][INFO:LMInit][Initialization complete.]
[2020-12-08 19:23:55][LUA:LMCore][Connected]
[2020-12-08 19:24:05][LUA:LMCore][Tick]
[2020-12-08 19:24:05][LUA:LMCore][Data:B4 00 00 00 80 00 00 00 03 00 00 00 04 00 00 00 4F 62 6A 31 38 00 00 00 00 01 00 00 03 00 00 00 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 31 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 32 0C 00 00 00 40 00 00 00 04 00 00 00 73 74 72 33 04 00 00 00 4F 62 6A 32 44 00 00 00 80 00 00 00 02 00 00 00 05 00 00 00 41 74 74 72 31 11 00 00 00 40 00 00 00 09 00 00 00 53 6F 6D 65 41 74 74 72 31 05 00 00 00 41 74 74 72 32 11 00 00 00 40 00 00 00 09 00 00 00 53 6F 6D 65 41 74 74 72 32 04 00 00 00 4F 62 6A 33 0C 00 00 00 20 00 00 00 1F 85 EB 51 B8 1E 09 40 ]