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.