【问题标题】:Unity code works in the editor but does not work on Build (EXE File) C#Unity 代码在编辑器中有效,但不适用于 Build (EXE File) C#
【发布时间】:2018-07-16 04:40:49
【问题描述】:

我的代码加载外部图像并从中构建一个用于 unity3d 的 SkyBox。 SkyBox的所有文件都在正确的路径上(手动复制)。

代码加载了 6 个外部图像,然后构建了一个 SkyBox 我认为在构建状态时加载存在问题。 (但不确定)

或者也许 Unity 阻止了我这样做?

而且我没有错误或警告代码。真的让我抓狂!!!

using System.IO;
using UnityEngine;

public class ChangeSkyBox : MonoBehaviour
{

public static Texture2D LoadPNG(string filePath)
{

    Texture2D tex = null;
    byte[] fileData;

    if (File.Exists(filePath))
    {
        fileData = File.ReadAllBytes(filePath);
        tex = new Texture2D(1024, 1024);
        tex.LoadImage(fileData);
    }
    tex.wrapMode = TextureWrapMode.Clamp;
    return tex;
}




public static Material CreateSkyboxMaterial(SkyboxManifest manifest)
{
    Material result = new Material(Shader.Find("RenderFX/Skybox"));
    result.SetTexture("_FrontTex", manifest.textures[0]);
    result.SetTexture("_BackTex", manifest.textures[1]);
    result.SetTexture("_LeftTex", manifest.textures[2]);
    result.SetTexture("_RightTex", manifest.textures[3]);
    result.SetTexture("_UpTex", manifest.textures[4]);
    result.SetTexture("_DownTex", manifest.textures[5]);

    return result;
}

private Texture2D[] textures;



private void Start()
{

    Texture2D xt1 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Front.png");
    Texture2D xt2 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Back.png");
    Texture2D xt3 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Left.png");
    Texture2D xt4 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Right.png");
    Texture2D xt5 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Top.png");
    Texture2D xt6 = LoadPNG(Directory.GetCurrentDirectory() + "\\Assets\\SkyBox\\Bottom.png");
    SkyboxManifest manifest = new SkyboxManifest(xt1, xt2, xt3, xt4, xt5, xt6);

    Material newMat = new Material(Shader.Find("RenderFX/Skybox"));
    newMat = CreateSkyboxMaterial(manifest);

    RenderSettings.skybox = newMat;

    DynamicGI.UpdateEnvironment();
}

}

public struct SkyboxManifest
{
    public Texture2D[] textures;

    public SkyboxManifest(Texture2D front, Texture2D back, Texture2D left, Texture2D right, Texture2D up, Texture2D down)
    {
        textures = new Texture2D[6]
        {
             front,
             back,
             left,
             right,
             up,
             down
        };
    }

}

【问题讨论】:

  • 在此之后 if (File.Exists(filePath)) 放一个 else { Debug.Log(filePath + " not found :("); } 看看它是否真的找到了文件。另外,资产感觉不像是外部路径
  • 谢谢。我自己打开文件夹并将文件放在那里

标签: unity3d


【解决方案1】:

我相信你的问题出在这条线上。

 Material result = new Material(Shader.Find("RenderFX/Skybox"));

Unity 在运行时找不到它。要修复它,请在 Unity 中手动制作“基础”材质,并通过 Inspector 将其附加到您的脚本中。

【讨论】:

  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多