纹理在编辑器中加载但不在独立中加载(显示为粉红色)

Eva*_*eil 1 c# unity-game-engine unityscript unity5

我正在使用名为Simple Obj的资产,它允许我导入 obj、它们的材料和纹理关联。这在我的编辑器中工作正常,但在我的独立版本中无效。我的OBJ 不在我的资源文件中,我使用 WWW 方法从另一个文件中获取它。

这是我的方法,他下载我的 OBJ,创建一个游戏对象并将其放置在我的场景中

private IEnumerator DownloadAndImportAllInBackground(string url, Plane newPlane)
{
    string objString = null;
    string mtlString = null;
    Hashtable textures = null;
    GameObject planeObject = null;
    bool gameObjectPerGroup = false;
    bool subMeshPerGroup = false;
    bool usesRightHanded = true;

    yield return StartCoroutine(DownloadFile(url, retval => objString = retval));
        yield return StartCoroutine(DownloadFile(url.Substring(0, url.Length - 4) + ".mtl", retval => mtlString = retval));
        if (mtlString != null && mtlString.Length > 0)
        {
            string path = url;
            int lastSlash = path.LastIndexOf('/', path.Length - 1);
            if (lastSlash >= 0) path = path.Substring(0, lastSlash + 1);
            Hashtable[] mtls = ObjImporter.ImportMaterialSpecs(mtlString);
            for (int i = 0; i < mtls.Length; i++)
            {
                if (mtls[i].ContainsKey("mainTexName"))
                {
                    Texture2D texture = null;
                    string texUrl = path + mtls[i]["mainTexName"];
                    yield return StartCoroutine(DownloadTexture(texUrl, retval => texture = retval));
                    if (texture != null)
                    {
                        if (textures == null) textures = new Hashtable();
                        textures[mtls[i]["mainTexName"]] = texture;
                    }
                }
            }
        }

    yield return StartCoroutine(DownloadFile(url, retval => objString = retval));

    if (objString != null && objString.Length > 0)
    {
        yield return StartCoroutine(ObjImporter.ImportInBackground(objString, mtlString, textures, retval => planeObject = retval, gameObjectPerGroup, subMeshPerGroup, usesRightHanded));
        planeObject.transform.localScale = new Vector3(0.0005f, 0.0005f, 0.0005f);
        if (planeObject == null)
        {
            Debug.Log("Null gameobject");
        }
        planeObject.name = newPlane.Callsign;
        planeObject.transform.position = new Vector3((float)newPlane.X, (float)newPlane.Afl / (3.2808f * 1852f), (float)newPlane.Y);
        planeObject.transform.eulerAngles = new Vector3(0, -180 + newPlane.Heading, 0);
        planeId_Object_Dictionnary.Add(newPlane.Flight, planeObject);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的编辑器/独立版本中发生的事情: 在此处输入图片说明

Gre*_*sek 5

粉红色外观意味着您的构建缺少网格渲染器组件上的材质分配或构建中缺少着色器。

如果您在运行时分配材质或着色器,请确保在构建中包含着色器。

您可以通过将任何着色器添加到编辑/项目设置/图形中的列表来强制统一包含任何着色器

在此处输入图片说明

  • 好的,我找到了解决方案,感谢您的帮助,如果您想稍微改进您的答案,我必须观察在我的编辑器模式下使用的所有着色器,并将其包含在我的独立着色器中。为此,我将预加载的着色器保存在资源中,并查看该资源中的着色器是什么。不知道我说清楚了吗? (2认同)