Как использовать «UnityEngine» в скомпилированном коде C # во время выполнения? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь скомпилировать код во время выполнения, используя C #, Unity и этот учебник . У меня все работает, но я хочу иметь возможность использовать методы UnityEngine, такие как Debug.Log(); в псевдокоде. Для этого я написал using UnityEngine; в нем, но получил следующую ошибку:

Не удалось найти имя типа или пространства имен "UnityEngine". Вам не хватает ссылки на сборку?

Как мне решить эту проблему?

Я пытался добавить ссылку на UnityEngine на CompilerParameters.ReferencedAssemblies, например:

//parameters is of type CompilerParameters
parameters.ReferencedAssemblies.Add("UnityEngine.dll");

но это дает мне следующую ошибку:

Файл метаданных UnityEngine.dll не найден.

Это самая важная часть моего кода, но выне сможет воспроизвести это так. Вместо этого получите код из вышеупомянутого учебника .

public void Compile()
{
  string code = @"
    using UnityEngine;
    namespace First
  {
    public class Program
    {
      public static void Main()
      {
            " + "Debug.Log(\"Test!\");" + @"
      }
    }
  }
";
  CSharpCodeProvider provider = new CSharpCodeProvider();
  CompilerParameters parameters = new CompilerParameters();
  parameters.ReferencedAssemblies.Add("UnityEngine.dll");
}

Поскольку я неопытен в C # и использую его только с Unity, я не знаю, что такое файл .dllесть и не знаю, с чего начать, когда это исправить. Я благодарен за любую помощь!

1 Ответ

2 голосов
/ 23 октября 2019

Вы должны поместить туда путь UnityEngine.dll, а не просто UnityEngine.dll, если только он не существует в рабочем каталоге, что весьма маловероятно.

Согласно этот ответ , вы можете легко найти UnityEngine.dll (и другие библиотеки DLL) в вашей файловой системе. Это под Editor\Data\Managed, поэтому вы должны написать:

parameters.ReferencedAssemblies.Add(@"C:\\path\to\your\unity\installation\Editor\Data\Managed\UnityEngine.dll");
...