Изменение текстуры материала - PullRequest
0 голосов
/ 30 марта 2020

Сначала я хотел бы извиниться, если мой вопрос очень простой c и тупой, так как я очень плохо знаком с кодированием и единством / вуфорией в целом.

Я бы хотел отследить пользовательский изображение и отображение четырехугольника под ним (я сделал эту часть). Мне также удалось установить материал / текстуру / внешний вид четырехугольника для изображения, расположенного на моем компьютере. Однако при попытке встроить приложение android я не могу правильно указать путь к файлу, и он не работает.

Я бы хотел, чтобы материал / текстура / внешний вид квадратора постоянно менялись / обновлялись, возможно ли это? Я могу постоянно перезаписывать файл изображения на моем компьютере / телефоне, но будет ли обновление фотографий в самом приложении?

Большое спасибо за любую помощь заранее!

Отчаявшийся студент

   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;


    }

}

1 Ответ

1 голос
/ 30 марта 2020

Хотя из вашего кода неясно, где _material и FinalMaterialRef первоначально объявлены - они не входят в область, которую вы показали - вы можете перепутать ссылки и перезаписать их, но не фактический материал , Это работает:

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;
        }
    }
}
...