2016-08-24 1 views
3

Je veux utiliser le code C++ dans C# pour l'unité en utilisant CLR. Je suis vraiment confus, parce que le projet se construit avec succès en studio visuel (sans erreurs ou avertissements). J'ai "permettrepeu sûr" bouton activé.Comment utiliser le code non sécurisé Unité

using UnityEngine; 
using System.Collections; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 


public class newspawn_real : MonoBehaviour { 

void Start() { 

    unsafe 
     { 

      fixed (int * p = &bam[0, 0, 0]) 
      { 
       CppWrapper.CppWrapperClass controlCpp = new CppWrapper.CppWrapperClass(); 

       controlCpp.allocate_both(); 
       controlCpp.fill_both(); 
       controlCpp.fill_wrapper(); 
} 
+0

Si quelque chose n'est pas clair s'il vous plaît dites-le moi et je vais le corriger. –

+1

Puisque Unity est une boîte noire, nous ne savons pas vraiment quelles fonctionnalités C# sont supportées quand le code est converti. Une approximation approximative est une chose dangereuse qui ne l'est pas. Avez-vous envisagé d'utiliser des méthodes de classe 'Marshal'? – Aybe

+0

voulez-vous dire dll import? '[DllImport ("C++ unitshi.dll")]' static externe int add (int a, int b); ' –

Répondre

9

Vous devez activer explicitement le code unsafe dans Unity. Vous pouvez suivre les étapes ci-dessous:

. Première étape, modifiez Niveau de compatibilité Api à .NET 2.0 Sous-ensemble.

enter image description here

. Créez un fichier dans votre répertoire <Project Path>/Assets et nommez-le smcs.rsp puis mettez -unsafe dans ce fichier. Enregistrez et fermez ce fichier.

enter image description here

Fermez et rouvrez Visual Studio et Unity.Vous devez les redémarrer tous les deux.

Il convient de noter que, même après avoir fait cela et re-démarrage à la fois l'unité et Visual Studio, mais le problème est toujours là, rename le fichier smcs.rsp à csc.rsp ou gmcs.rsp et recommencez chaque fois jusqu'à ce que vous en obteniez un qui fonctionne. Bien que, smcs.rsp devrait le faire la première fois.

Simple code C# dangereux qui compile après cela.

public class newspawn_real : MonoBehaviour 
{ 
    unsafe static void SquarePtrParam(int* p) 
    { 
     *p *= *p; 
    } 

    void Start() 
    { 
     unsafe 
     { 
      int i = 5; 
      // Unsafe method: uses address-of operator (&): 
      SquarePtrParam(&i); 
      Debug.Log(i); 
     } 
    } 
} 

EDIT:

Pour la dernière version Unity, le nom du fichier doit être mcs.rsp. Tout le reste reste le même.

+1

merci beaucoup! C'est le meilleur forum sur terre. –