¿Por qué mi código C # 6 no se compila en Unity?

9

¿Por qué no puede Unity trabajar con el código C # 6 ? Siempre me da errores de compilación. Aquí hay algunos ejemplos de código:

using static System.Convert;
using static System.Environment;

$"€{punten}{NewLine}€{Money}{NewLine}€{KilledEnemies}{NewLine}€{bonus}{NewLine}€{total}";

Utilizo Visual Studio como mi editor de código y construyo sin errores. Si presiono play en Unity, no se construirá.

H. Pauwelyn
fuente
Buscar unity .net profile upgradeen Google
mat

Respuestas:

18

Unity usa una versión antigua de Mono runtime que se basa en .NET3.5. Utiliza algo entre C # 3 y 4 en términos de características.

Encontré esto buscando en Google. No estoy seguro si funciona pero podría ser algo que valga la pena investigar.


fuente
Vale la pena señalar que hay planes para actualizar a un perfil .NET más nuevo en el futuro ( unity3d.com/unity/roadmap ). Sin embargo, dados los requisitos previos establecidos en la hoja de ruta, veremos que eso suceda solo a fines de 2016 como muy pronto, probablemente hasta algún momento en 2017.
evilcandybag
77
El enlace en esta respuesta se pudrió y ahora devuelve un 404 :(
ashes999
77
Esta es la razón por la cual las personas no deberían publicar enlaces en stackexchange sin proporcionar una sinopsis.
Philipp
Según ( forum.unity3d.com/threads/… ) esa herramienta ya no se desarrolla / admite. Una alternativa es ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), que uso personalmente, aunque tiene fallas (como Visual Studio se olvida de ello), o mira la respuesta de @BenAdams , abajo, para mejores noticias.
Khale_Kitha
4

Este video en YouTube muestra cómo alguien pudo lograr que la sintaxis C # 6 funcionara en Unity creando un nuevo proyecto, cambiando el .Net Framework de destino nuevamente a 3.5, configurando los directorios de salida de compilación y lanzamiento en la carpeta de activos del proyecto de Unity y agregando un referencia a la dll UnityEngine. La depuración parece funcionar igual.

cjsimon
fuente
2

El compilador en Visual Studio tiene más funciones que el compilador en Unity, lo que significa que algunos códigos (especialmente las funciones más recientes de C #) generarán un error en Unity, pero no en Visual Studio.

Sin embargo, puede cambiar su marco de destino para que coincida con el más cercano a lo que utiliza Unity en su editor. Lo hice en Xamarin al desarrollar bibliotecas para Unity, pero parece que también es posible en Visual Studio.

En Visual Studio, en las propiedades del proyecto DLL, establezca la propiedad del marco de destino en la versión del marco de Unity que está utilizando. Esta es la biblioteca de clase base de Unity que coincide con la compatibilidad de API a la que apunta su proyecto, como las bibliotecas de clase base completa, micro o web de Unity. Esto evita que su DLL invoque métodos de marco que existen en otros marcos o niveles de compatibilidad, pero que podrían no existir en la versión de marco de Unity que está utilizando.

https://msdn.microsoft.com/en-us/library/dn940020.aspx

Mattias
fuente
Es posible que desee señalar que el uso de un marco de destino diferente puede causar problemas al compilar para otras plataformas que no sean Windows.
Philipp