更改 material 的纹理
Changing the texture of material
如果我的问题非常基础和愚蠢,我首先想事先道歉,因为我对编码和 unity/vuforia 总体上还很陌生。
我想跟踪自定义图像并在其下方显示一个四边形(我已经完成了这部分)。我还设法将四边形的 material/texture/look 设置为位于我计算机中的图像。但是,当尝试构建到 android 应用程序时,我无法正确设置文件路径并且它不起作用。
我希望四边形的 material/texture/look 一直保持 changing/updating,这可能吗?我可以不断地覆盖我 computer/phone 上的图像文件,但照片会在应用程序本身中更新吗?
非常感谢您的提前帮助!
绝望的学生
void Start()
{
string path = "file://storage/emulated/0/Android/data/com.kenny.argame/files/im2.jpg";
StartCoroutine(DownloadImage(path));
}
IEnumerator DownloadImage(string MediaUrl)
{
GetComponent<Renderer>().material = FinalMaterialRef;
UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
Debug.Log(request.error);
else
_material.mainTexture = ((DownloadHandlerTexture)request.downloadHandler).texture;
FinalMaterialRef = _material;
}
}
虽然从您的代码中不清楚 _material
和 FinalMaterialRef
最初声明的位置——它们不在您显示的范围内——您可能混淆了引用并覆盖了它们,但不是实际的 material。这有效:
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class ChangeTexture : MonoBehaviour
{
Material material = null;
void Start()
{
material = GetComponent<Renderer>().material;
const string path = "file://E:/_temp/1.jpg";
StartCoroutine(DownloadAndAssignImage(path));
}
IEnumerator DownloadAndAssignImage(string mediaUrl)
{
UnityWebRequest request = UnityWebRequestTexture.GetTexture(mediaUrl);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(request.error);
}
else
{
material.mainTexture =
((DownloadHandlerTexture)request.downloadHandler).texture;
}
}
}
如果我的问题非常基础和愚蠢,我首先想事先道歉,因为我对编码和 unity/vuforia 总体上还很陌生。
我想跟踪自定义图像并在其下方显示一个四边形(我已经完成了这部分)。我还设法将四边形的 material/texture/look 设置为位于我计算机中的图像。但是,当尝试构建到 android 应用程序时,我无法正确设置文件路径并且它不起作用。
我希望四边形的 material/texture/look 一直保持 changing/updating,这可能吗?我可以不断地覆盖我 computer/phone 上的图像文件,但照片会在应用程序本身中更新吗?
非常感谢您的提前帮助!
绝望的学生
void Start()
{
string path = "file://storage/emulated/0/Android/data/com.kenny.argame/files/im2.jpg";
StartCoroutine(DownloadImage(path));
}
IEnumerator DownloadImage(string MediaUrl)
{
GetComponent<Renderer>().material = FinalMaterialRef;
UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
Debug.Log(request.error);
else
_material.mainTexture = ((DownloadHandlerTexture)request.downloadHandler).texture;
FinalMaterialRef = _material;
}
}
虽然从您的代码中不清楚 _material
和 FinalMaterialRef
最初声明的位置——它们不在您显示的范围内——您可能混淆了引用并覆盖了它们,但不是实际的 material。这有效:
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class ChangeTexture : MonoBehaviour
{
Material material = null;
void Start()
{
material = GetComponent<Renderer>().material;
const string path = "file://E:/_temp/1.jpg";
StartCoroutine(DownloadAndAssignImage(path));
}
IEnumerator DownloadAndAssignImage(string mediaUrl)
{
UnityWebRequest request = UnityWebRequestTexture.GetTexture(mediaUrl);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(request.error);
}
else
{
material.mainTexture =
((DownloadHandlerTexture)request.downloadHandler).texture;
}
}
}