Unity - 奇怪的错误,构建与构建和运行
Posted
技术标签:
【中文标题】Unity - 奇怪的错误,构建与构建和运行【英文标题】:Unity - Weird Bug , Build vs Build and Run 【发布时间】:2021-04-13 13:51:45 【问题描述】:我正在开发一个统一项目,我在 sphere
game object
上应用 texture
。我从 .jpg 文件 中获得了纹理。指定.jpg文件不放在Resources
或Assets
文件夹中,而是放在项目内的文件夹中,项目的.exe也将在此文件夹中,构建后它 。所以 .jpg 的路径是 /project-name/Build/texture.jpg 。为了访问 .jpg,我使用了 UnityWebRequestTexture
类,该类被修改用于访问磁盘上的文件,也使用相对路径,正如您在我的代码中看到的那样。
// For accessing the .jpg and using it as file we use the UnityWebRequestTexture.GetTexture (see uinty docs)
// The path is a URL , but we modify it to work for local computer with relative path
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class LoadTexture : MonoBehaviour
Texture2D texture;
Texture2D texture2;
public GameObject sph;
bool on = false;
public Renderer sphRenderer;
void Start()
sphRenderer = sph.GetComponent<Renderer>();
StartCoroutine(GetText());
IEnumerator GetText()
using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture("file://" + "/../Build/texture-sphere.jpg")) // Relative path
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
// Display error
Debug.Log(uwr.error);
else
// Get downloaded asset bundle
texture = DownloadHandlerTexture.GetContent(uwr);
void Update()
// Implemenation of toggle by pressing T key
// Press T
if (Input.GetKeyDown(KeyCode.T))
on = !on;
if (on)
// Change to white color first
sphRenderer.material.color = Color.white;
//Resources.Load("texture", typeof(Texture2D));
// Set the Texture to the SPH Renderer
sphRenderer.material.mainTexture = texture as Texture2D;
else if (!on)
//set texture to null
sphRenderer.material.mainTexture = null;
// change color to red
sphRenderer.material.color = Color.red;
基本上我所做的是切换 shpere的外观在红色和应用在其上的纹理之间,按T key
。我遇到了一个非常奇怪的错误:
如果我构建并运行我的项目,纹理会在切换时根据需要应用,但如果我点击 .exe 文件( 来自同一个版本)并再次运行它,它没有,只是保持白色(因为你可以在我的代码中看到,我首先将球体设为白色,然后应用纹理)。我还尝试了所有可能的 build and run 和 build 通过更改位置等组合,但问题仍然存在。另外,当我点击 play 时,在 unity editor 的 Game window 中它会按预期运行。只有点击.exe时才会出现问题。
我猜,通过 Build and Run ,unity 仍然使用编辑器的Assets
吗?也许魔鬼就在 dll 或 Resources
文件夹中?
我还发布了我上面所说的状态的图像。
构建并运行:
当我点击 .exe 时:
顺便说一下,颜色显示不同,导致Random.Range
代码运行。
【问题讨论】:
我怀疑这是一个“工作目录”问题。当你“构建”然后运行时,“工作目录”就是exe所在的目录,jpg的路径应该是./texture.jpg
。我的猜测是“构建并运行”运行 exe,但将工作目录设置为项目目录。
【参考方案1】:
这就是StreamingAssets
文件夹的用途。将运行时加载图形放入其中并使用Application.streamingAssetsPath
变量访问它们。
请参阅the manual 了解更多信息。
【讨论】:
以上是关于Unity - 奇怪的错误,构建与构建和运行的主要内容,如果未能解决你的问题,请参考以下文章
使用 cx-freeze 构建 PySide 程序 osx 的奇怪错误