【问题标题】:How to load an image in Unity from a link如何从链接加载 Unity 中的图像
【发布时间】:2017-02-10 18:09:39
【问题描述】:
  • 我有一个场景,我在画布中声明了一个图像

  • 对于该图像,我需要从链接(“http/assets/screensaver”)加载图像

我实际上已经做了一些事情来加载图像:

urllll = "http://192.168.137.129/ooredoo/client_api/" + ConfirmPath;
WWW imgLink1 = new WWW (urllll);
img1 = imgLink1.texture;
  • 但这会将图像完全加载到整个场景中
  • 我需要将图像加载到我在画布中声明的图像上

编辑:完整代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using System.IO;
using UnityEngine.Events;
using LitJson;
using System.Data;
using Mono.Data.Sqlite;
using System.Linq;
using System.Collections.Generic;
using System;

public class ScreenSaverFromServer : MonoBehaviour
{

public Text Tester;
public int st = 0;
public int TimerFrAdd = 30;
public int OgTimerFrAdd;
public int ImageSize = 5;
public Image[] Imagez;
public Image Imag;
public int TimeToChangeImage = 10;
public int TimeToChangeVideo= 10;
public string imagePath = "Assets/Images/1K.png";
public Image photo;
public Texture2D img1;
public string urllll;
public string ConfirmPath;
public string[] paths = {"1","2","3","4","5","6","7","8","9","10"}; 
public string[] VedioPaths = { "Look at NEW Trump's 2-minute closing argument ad.mp4","The 2 minutes love story of TV Commercial for Canon 'You are my inspiration'.mp4"};
public string ConfirmPath1;
public  int PathNO1;
public int PathNO ;
public bool guitextureindi = true;
public Image guitextureindFrame;
public string screensavertype,ImageFrameIndic;

void Start () 
{
    OgTimerFrAdd = TimerFrAdd;
    Tester = GameObject.Find ("Tester").GetComponent<Text> ();
    InvokeRepeating("touches1", 1, 1);

    Imag = GameObject.Find("ImageFrame").GetComponent<Image>();

    Imag.enabled = false;

    screensavertype = PlayerPrefs.GetString ("screensavertype");
    ImageFrameIndic = PlayerPrefs.GetString ("screensaverActive");
}

void Update ()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        print ("touched");

        if (TimerFrAdd == 0) 
        {
            InvokeRepeating("touches1", 1, 1);
        }

        TimerFrAdd = OgTimerFrAdd;
        Imag.enabled = false;
    }

    if (guitextureindFrame.enabled) 
    {
        guitextureindi = true;
    }

    if(screensavertype == "0")
    {
        Imag.enabled = false;
    }
}

public void touches1()
{
    TimerFrAdd = TimerFrAdd - 1;
    Tester.text = TimerFrAdd.ToString ();
    if (TimerFrAdd == 0) 
    {
        if(ImageFrameIndic == "1")
        {
            Imag.enabled = true;
        }

        CancelInvoke (methodName : "touches1");

        string[] CallChange = {"ChangeImage","ChangeVideo" };
        System.Random random0 = new System.Random();
        int PathNO0 = random0.Next (CallChange.Length);
        string ConfirmPath0 =  CallChange[PathNO0];

        print (ConfirmPath0);

        InvokeRepeating ("ChangeImage", 1, TimeToChangeImage);
    }
}

public void ChangeImage()
{
    //System.Random random = new System.Random();
    //PathNO = random.Next (paths.Length);
    //ConfirmPath =  paths[PathNO];
    //photo.sprite =Resources.Load<Sprite>("Images/"+ConfirmPath) as Sprite ;
    print("aaaaaaaa");
    StartCoroutine (LoadImg1()); 
}


public void ChangeVideo()
{
    Imag.enabled = false;
    CancelInvoke (methodName : "ChangeImage");
    CancelInvoke (methodName : "touches1");
    CancelInvoke (methodName : "ChangeVideo");

    System.Random random1 = new System.Random();
    PathNO1 = random1.Next (VedioPaths.Length);
    ConfirmPath1 =  VedioPaths[PathNO1];
    Handheld.PlayFullScreenMovie (ConfirmPath1,Color.black, FullScreenMovieControlMode.CancelOnInput);

    if (TimerFrAdd == 0) 
    {
        InvokeRepeating("touches1", 1, 1);
        TimerFrAdd = OgTimerFrAdd;
    }
}

IEnumerator LoadImg1()
{
    yield return 0;

    //List<string> Items13 = new List<string> (ScreenSaverCodesApi.Items12);
    List<string> Items13 = ScreenSaverCodesApi.Items12;

    print("aaaaaaaa2222222");
    System.Random random1 = new System.Random();
    print("aaaaaaaa333333");
    int PathNO = Items13.Count;

    int num = UnityEngine.Random.Range(0,PathNO);
    print(num);

    foreach (string st in Items13) {
        print (st);
    }
    print ("path-----"+Items13[num]);
    string ConfirmPath =  Items13[num];
    print(ConfirmPath);
    print("aaaaaaaa555555");   
    urllll = "http://hcfhfch/nn/client_api/" + ConfirmPath; // test with an image link

    print("aaaaaaaa6666666");

    WWW imgLink1 = new WWW (urllll);
    print("aaaaaaaa777777");
    print (urllll);
    print("aaaaaaaa888888");
    yield return imgLink1;
    print("aaaaaaaa999999");

    img1 = imgLink1.texture;
}

void OnGUI()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        guitextureindi = false;
    }

    if (guitextureindi) 
    {
        GUILayout.Label (img1);
    }
}
}

【问题讨论】:

  • @Programmer 我需要显示来自互联网的图像......我需要通过缩放到比原始尺寸更小的尺寸来显示图像,我的代码全屏显示图像
  • 在谷歌搜索“在 unity3d 中的 html”。我敢打赌,使用其中一种解决方案,你会得到你想要的。
  • 我的问题是我无法缩放从网上加载的图像
  • 是的..怎么可能

标签: c# unity3d


【解决方案1】:

您正在下载纹理并将其存储在img1 变量中,该变量是Texture2D 的一种类型。然后在 OnGUI 函数中使用 GUILayout.Label 显示 Texture2D 图像。问题是调整图像大小...

就像我在您的other 帖子中提到的那样,请不要使用OnGUI 函数。 不要使用任何需要 OnGUI 函数的 Unity API除非您正在制作编辑器插件。

在你的函数中,

void OnGUI()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        guitextureindi = false;
    }

    if (guitextureindi) 
    {
        GUILayout.Label (img1);
    }
}

将你想要的widthlength传递给GUILayout.Label函数。

例如:

public float textureWidth = 400;
public float textureHeight = 400;

public Texture2D img1;
void OnGUI()
{
    GUILayout.Label(img1, GUILayout.Width(textureWidth), GUILayout.Height(textureHeight));
}

在 Unity 中显示图像的正确/正确方式

使用Image 组件:

public float textureWidth = 400;
public float textureHeight = 400;

public Texture2D img1;
public Image textureDisplayer;

void SomeFunction()
{
    textureDisplayer.sprite = Sprite.Create(img1, new Rect(0, 0, textureWidth, textureHeight), new Vector2());
}

使用RawImage 组件:

public int textureWidth = 400;
public int textureHeight = 400;

public Texture2D img1;
public RawImage textureDisplayer;

void SomeFunction()
{
    img1.Resize(textureWidth, textureHeight);
    textureDisplayer.texture = img1;
}

您还可以调整屏幕上的ImageRawImage 的大小:

textureDisplayer.GetComponent<RectTransform>().sizeDelta = new Vector2(textureWidth, textureHeight);

简单的下载、调整大小和显示图像示例:

public int textureWidth = 400;
public int textureHeight = 400;

public RawImage textureDisplayer;

void Start()
{
    string imageUrl = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
    StartCoroutine(LoadImg(imageUrl));
}

void displayImage(Texture2D imgToDisp)
{
    //Resize Image
    textureDisplayer.GetComponent<RectTransform>().sizeDelta = new Vector2(textureWidth, textureHeight);
    textureDisplayer.texture = imgToDisp;
}


IEnumerator LoadImg(string url)
{
    yield return null;
    WWW www = new WWW(url);
    yield return www;

    displayImage(www.texture);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2021-01-08
    • 2016-06-24
    • 2022-01-06
    • 1970-01-01
    • 2015-04-25
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多