Я искал и просматривал всю сеть о том, как загрузить сборку в Unity3D, и мне очень тяжело.Извините, если этот пост будет длинным, но я буду помещать все, что я узнал и как далеко я продвинулся, так как я впервые работаю в .net и dlls.
У меня естьродной dll, у него есть целая куча внешних C, так что я могу загрузить все во время выполнения.Это работает в единстве, если я использую атрибут [DLLImport] и тому подобное.Тем не менее, это громоздкий и не очень многократно используемый код.Позже это станет еще более обременительным, когда мне придется абстрагировать мою систему между более чем 1 собственной библиотекой.
Поэтому я решил, что сделаю оболочку C +++ / CLI, а затем загрузлю ее в Unity3d, как и любую другую DLLи просто свяжите пространство имен: «используя MyWrapper;»
Я создал простейшую библиотеку C ++ / CLI, какую только мог себе представить.все, что делает моя библиотека, имеет класс (Class1) и функцию int getnum () {return 5;}.Я использую VC ++ 2010 Express, и я строю с V90, и изменил файл vcxproj для цели 2.0.Я знаю, единство поддерживает только 2.0.Я встраиваю / clr для того, чтобы иметь возможность иметь нативный и .net код.
Он полностью вылетает из unity3d.Это мой журнал ошибок в GameManager.Awake () [0x0001d] в Manager \ GameManager.cs: 116 в GameManager.Awake () [0x00000] в Manager \ GameManager.cs: 107 at (вызов оболочки во время выполнения) GUIRadioButton.runtime_invoke_void (object, intptr, intptr, intptr) <0xffffffff> Получение необработанного исключения NULL
, если я встраиваю его в / clr: safe, вместо этого он работает нормально./ clr: pure также не работает.
Поэтому я решил сделать внешний проект командной строки c #, чтобы проверить все.Я загружаю свою библиотеку, и компилирую в 2.0, и / clr (смешанный режим) работает без проблем.
Я использую Unity 2.6 Pro.
Возможно, то, что я пытаюсь сделать, невозможно, я не знаю .. Я имею в виду, я подумал, что это было то, что было всем .NETоколо.Я просто хочу иметь систему, которую можно использовать в других проектах (C ++).
Спасибо за понимание.
Вот мой тестовый проект c ++ / cli.
#pragma once
using namespace System;
namespace CLRTest {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
Class1(){}
int getnum (){return 5;}
};
}
Когда я создаю проект командной строки C #, как это.это работает.
using System;
using System.Collections.Generic;
using System.Text;
using CLRTest;
namespace CLRTestLoad
{
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
Console.WriteLine ("num is = " + c.getnum());
}
}
}
При выполнении этой строки в Unity3d происходит сбой всего редактора.(Да, я вставил оператор использования)
Class1 c = new Class1();