Unity выдает ошибку «CS0246: не удалось найти тип или имя пространства имен« SharpKml » - PullRequest
0 голосов
/ 19 июня 2019

Я исследую, как генерировать среды в Unity, используя GIS данные в формате KML. Я наткнулся на плагин SharpKML, и он, кажется, идеально подходит для моих нужд.

Однако я испытываю странную ошибку в том, что Unity выдает ошибку

«CS0246: не удалось найти тип или имя пространства имен arp SharpKml» (отсутствует директива using или ссылка на сборку?) »

Ссылка добавлена ​​в VS, и у меня есть using SharpKML.Dom и using SharpKML.Engine записи, которые без проблем компилируются в VS.

Но Unity по-прежнему выдает ошибку.

Я установил через NuGet, а также скачал исходный код SharpKML, перестроил dll на своем компьютере и получил прямую ссылку без изменений. VS также, кажется, периодически сбрасывает ссылку.

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

Версия Unity 2019.1.4f1, а версия VS 2017 работающий фреймворк 4.7.03062

Я пересоздал проект на другой машине в другой сети и столкнулся с той же проблемой.

using UnityEngine;
using System.IO;
using System.Linq;
using SharpKml.Dom;
using SharpKml.Engine;

public class RenderKML : MonoBehaviour
{
    public string KLMPath;

    // Start is called before the first frame update
    void Start()
    {
        string kmlPth = "Assets\\kml";
        GetKMLFiles(kmlPth);
    }

    private void GetKMLFiles(string pth)
    {
        if (pth != null)
        {
            DirectoryInfo dir = new DirectoryInfo(pth);
            FileInfo[] info = dir.GetFiles("*.kml");
            foreach (FileInfo f in info)
            {
                print(f.FullName);
                GetKMLData(f);
            }

        }
    }

    private void GetKMLData(FileInfo fI)
    {
       // This will read a Kml file into memory.
        Stream fs = new FileStream(fI.FullName, FileMode.Open);
        KmlFile file = KmlFile.Load(fs);

        Kml kml = file.Root as Kml;
        if (kml != null)
        {
            foreach (var placemark in kml.Flatten().OfType<Placemark>())
            {
                print(placemark.Name);
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вам необходимо использовать папку Plugin в Unity3D.Загрузите ваш Package или DLL и поместите его туда.

Эта ссылка может быть полезна

0 голосов
/ 19 июня 2019

Каждый раз, когда вы нажимаете «Выполнить», Unity перезаписывает файлы проекта. Вы не можете просто использовать nuget или добавить ссылки из внешних проектов. Вам следует скачать все dll-файлы SharpKML и поместить их в папку «Ресурсы» вручную. См. Это для получения дополнительной информации: https://answers.unity.com/questions/458300/how-to-use-a-external-dll.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...