Est-il possible d'utiliser C ++ avec Unity au lieu de C #?


Réponses:


23

Il est possible d'utiliser C ++ avec la version gratuite d'Unity, bien qu'il soit plus facile de travailler avec si vous avez une licence Unity Pro. Tout ce que vous avez à faire est de l'envelopper dans une DLL et de suivre les instructions ci-dessous pour savoir où le placer.

J'ai écrit un article qui couvre ce sujet: Unity et DLL: C # (géré) et C ++ (non géré)

Pour Unity 4 gratuit:

  • Ajoutez du code non managé à la racine du projet Unity: UnityProject
  • Ajoutez le code managé au dossier Plugins: UnityProject->Plugins
  • Lorsque vous générez un projet, copiez le code non managé dans BuildRoot-> Data->Plugins

Pour Unity 4 Pro et tout Unity 5:

  • Copiez simplement les DLL dans UnityProject->Plugins

Unmanaged signifie C ++ et Managed signifie C #


1
Cela a-t-il changé pour Unity 5 où la version gratuite contient toutes les fonctionnalités du moteur de la version pro?
GeekyMonkey

1
@GeekyMonkey Mise à jour de l'article et de la réponse.
MLM

Cela n'a aucun sens d'essayer de remplacer C # par C ++ dans le contexte Unity3D. Cette réponse peut être utile si une interface avec le code natif a été demandée.
aggsol

1
Avec la nouvelle technologie IL2C ++, il n'y a pas beaucoup de raisons d'utiliser C ++ au lieu de C #. Pour l'instant, il est limité aux plates-formes mobiles, mais attendez-vous à ce que la technologie soit bientôt disponible sur PC.
JPtheK9

1
@ user2023370 J'ai mis à jour cette partie pour rendre le langage plus clair "Unity 4 et ci-dessous", merci pour le commentaire :)
MLM

1

C'est possible mais peu pratique. Il faudrait écrire du C ++ managé pour y parvenir. Et oui, il existe une chose telle que le C ++ managé. Géré ne signifie pas spécifiquement C # et C ++ non managé. Pour y parvenir, vous devrez importer le fichier DLL UnityEngine. Lorsque vous avez terminé, vous le placez dans le dossier (Unity Project Name) / Plugins. Voici le code que vous utiliseriez: Dans le fichier C ++:

public ref class CPPUNITY {
  public:
     void Start() {
         Debug::Log("C++ printed message");
     }

};

Dans le fichier C #:

     using UnityEngine;
     public class FileName {
         void Start() {
              CPPUNITY.Start();
         }
     }

Ce code exact ne fonctionnerait pas mais c'est une base.


Le runtime mono utilisé dans Unity prend-il enfin en charge les assemblages en mode mixte? Nous n'avons pas eu de chance il y a quelques années sur 4 et les assemblages de VS 2012 donc ce serait vraiment génial!
Oliver
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.