Подключение своих DLL к Unity3.3

Научился сам? Помоги начинающему.

Подключение своих DLL к Unity3.3

Сообщение tremino 06 июн 2011, 16:35

Занимаюсь визуализцией летательных аппратов. Раньше использовал Gamestudio7.82

Передачу данных о ЛА выполнял через DLL по методу отображения файла на память.
Координаты + Угловое положение.
После изучения возможностей Unity возникла идея использовать готовую программу передачи и DLL в Unity.

В результате было проверенно два способа подключения DLL
Первый способ статический приведен в Help
Указаннй способ приведен в скрипте New_Aleks.cs
При старте вызывается функция Init_Server которая выполняет подключение мезанизма предачи данных.
Затем функция Update чтение данных через функции Get_X и так далее.
Реализация DLL приведена в файле Emul_DLL.cpp (как пример)
DLL необходимо поместить в папку plugins своего проекта.
Работает только в Pro версии. При использовании Loader в редакторе все работает. НЕ работает отладка в Monodevelop.

Второй способ динамической загрузки приведен в файле New_Aleks_L.cs.
Он немного посложней за счет (вызова Winapi )С_Srap.
Принцип работы тот же . Грузим DLL
Затем определяем адрес необходимой функции.
Делаем преобразование следующим образом

public delegate int Init_Server();

Init_Server server = (Init_Server)Marshal.GetDelegateForFunctionPointer(test_a, typeof(Init_Server));


Получаем ссылку на функцию (Init_Server) в виде функции server()

Connect = server(); //ВОТ НА ЭТОЙ
Которую можно вызывать . Остальные функции ( координат и углов )делаем по той же схеме.
Только тип возвращаемого значения берем float.

При такой схеме Monodevelop работает нормально. DLL помещаем в директорию проекта

Для полного примера помещаю архив с Unity.packge + Программа передачи данных

Для демонстрации
1 Запускаем Unity проект на выполнение
2 Не закрывая Unitty запускаем программу Emul*.exe в ней нажимаем кнопку «Подключение сервера» и грузим файл «test.txt” и жмем на Пуск
Переходим в Unity наблюдаем полет ЛА по Змейке.

Замечание по DLL. Выяснилось что проект не работал на некоторых машинах Нет загрузки DLL . После пересборки DLL на VC6 Размер DLL существенно увеличися зато нет проблем с переносимостью. Более детально проблему не изучал .

Для проекта использовался как заготовка проект Танк(из-за размеров).В проекте много заготовок (заранее прошу прощения за мусор)

Ресурс проекта (29Мб, 5% на восст.)--->http://letitbit.net/download/79314.7e576b4e3d337dd7024f4be068ed/Cod.rar.html

Мой E-mail: alexan58@mail.ru
tremino
UNец
 
Сообщения: 1
Зарегистрирован: 06 июн 2011, 16:23

Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1