2017-02-26 1 views
0

Je voudrais exposer certains objets et classes pour les plugins DLL pour un jeu Unity 5.Exposer une classe dans mon jeu d'unité à une DLL qui est chargée à l'exécution par le même jeu?

Les plugins (assemblys DLL/.net) sont chargés ultérieurement lors de l'exécution. Mais ces DLL doivent accéder aux classes et objets déjà créés par le jeu principal.

J'utilise la méthode Assembly.LoadFrom() pour charger les plugins DLL: Use assembly class without the assembly object

Comme il ne semble pas y avoir de fichiers d'en-tête en C# comme en C++, comment puis-je exposerai de (.exe le programme de jeu) des classes pour les plugins?

Répondre

1

Référence UnityEngine.dll et votre Assemblée-CSharp.dll

Chaque fois que l'éditeur Unity compile le code C#, il génère plus souvent une DLL (il génère plus si vous utilisez UnityScript, par exemple) - que DLL est appelé Assembly-CSharp.dll et il est stocké dans le dossier Library/ScriptAssemblies de vos fichiers de projet dans l'éditeur.

Comme toute autre DLL, vous devez le référencer. Comme il utilise l'API Unity, vous devrez aussi référencer UnityEngine.dll, qui peut être trouvé dans, par exemple, c:/Program Files/Unity/Editor/Data/PlaybackEngines/androidplayer/Managed/UnityEngine.dll

Pour la plupart des plates-formes, UnityEngine.dll est le même (ie ce qui précède est en utilisant celui qui est compilé dans une construction Android), donc peu importe lequel vous utilisez, cependant, devrait utiliser celui pour votre plate-forme cible.

plates-formes, cela ne fonctionne pas pour

Comme une note de côté, gardez à l'esprit que DLL chargement ne fonctionne pas sur une variété de plates-formes - iOS et WebGL exemples aussi bien connu (parce qu'ils ne fonctionnent pas .NET IL du tout).

Après une construction a été

Vous voulez vous assurer que vous faites référence à la DLL correcte après une construction a été faite. Avec Windows autonome, par exemple, vous le retrouverez facilement dans le dossier *-Data. Sur Android, il peut être extrait de l'APK aussi.

En résumé

En général, lorsque vous construisez le jeu, vous aurez besoin de recompiler votre DLL (faisant référence à la dernière Assembly-CSharp.dll). En remarque, vous pouvez également précompiler votre base de code entière dans une DLL et l'utiliser dans votre projet, mais gardez à l'esprit que cela casse #preprocessor directives et que vous devez le reconstruire lorsque vous échangez des plates-formes. Cependant, au moins, vous avez un contrôle total sur la reconstruction de cette DLL (et par conséquent, lorsque vos références le nécessitent).