Por que meu código C # 6 não é compilado no Unity?

9

Por que o Unity não pode trabalhar com código C # 6 ? Sempre me dá erros de compilador. Aqui estão alguns exemplos de código:

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

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

Eu uso o Visual Studio como meu editor de código e construo sem erros. Se eu pressionar play no Unity, ele não será construído.

H. Pauwelyn
fonte
Pesquise unity .net profile upgradeno Google
mat

Respostas:

18

O Unity usa uma versão antiga do Mono runtime, baseada no .NET3.5. Ele usa algo entre C # 3 e 4 em termos de recursos.

Eu encontrei isso pesquisando no Google. Não tenho certeza se funciona, mas pode ser algo que vale a pena investigar.


fonte
Vale a pena notar que há planos de atualizar para um novo perfil .NET em algum momento no futuro ( unity3d.com/unity/roadmap ). No entanto, dado os pré-requisitos estabelecidos no roteiro veremos que só acontecem no final de 2016, o muito mais rapidamente, provavelmente não até que em algum momento de 2017.
evilcandybag
7
O link nesta resposta apodrecido e agora retorna a 404 :(
ashes999
7
Esse é o motivo pelo qual as pessoas não devem postar links no stackexchange sem fornecer uma sinopse.
Philipp
Por ( forum.unity3d.com/threads/… ) essa ferramenta não é mais desenvolvida / suportada. Uma alternativa é ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), que eu uso pessoalmente, embora tenha falhas (como o Visual Studio esquecendo disso) ou procure a resposta @BenAdams , abaixo, para obter melhores notícias.
Khale_Kitha
6

A Unity Technologies anunciou que o Unity está atualizando para 4.6+. Está disponível através de testes beta agora.

Ben Adams
fonte
4

Este vídeo no YouTube demonstra como alguém foi capaz de obter a sintaxe C # 6 trabalhando no Unity criando um novo projeto, alterando o .Net Framework de destino para 3.5, definindo os diretórios de compilação e lançamento na pasta de ativos do projeto Unity e adicionando um referência à DLL do UnityEngine. A depuração parece funcionar da mesma maneira.

cjsimon
fonte
2

O compilador no Visual Studio possui mais recursos que o compilador no Unity, o que significa que algum código (especialmente os recursos c # mais recentes) causará um erro no Unity, mas não no Visual Studio.

No entanto, você pode alterar sua estrutura de destino para corresponder à que mais se aproxima do que o Unity usa em seu editor. Fiz isso no Xamarin ao desenvolver bibliotecas para o Unity, mas parece que também é possível no Visual Studio.

No Visual Studio, nas propriedades do projeto DLL, defina a propriedade da estrutura Target como a versão da estrutura Unity que você está usando. Esta é a biblioteca de classes base do Unity que corresponde à compatibilidade da API que seu projeto visa, como as bibliotecas de classes básicas, micro ou web do Unity. Isso impede que sua DLL chame métodos de estrutura existentes em outras estruturas ou níveis de compatibilidade, mas que podem não existir na versão da estrutura do Unity que você está usando.

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

Mattias
fonte
Convém salientar que o uso de uma estrutura de destino diferente pode causar problemas ao criar para outras plataformas que não o Windows.
Philipp