Unity 基础之 实现动态加载网络端、PC端和 Android 端指定路径下的图片的简单方法

 

 

Unity 基础之 实现动态加载网络端、PC端和 Android 端指定路径下的图片的简单方法

 

目录

路径Unity 基础之 实现动态加载网络端、PC端和 Android 端指定路径下的图片的简单方法

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码


 

一、简单介绍

Unity中的一些基础知识点,便于后期查看学习。

本节介绍,如何动态加载网络上,电脑上或者Android手机上指定路径的图片的简单方式,方法不唯一,仅供参考。

 

二、实现原理

1、UnityWebRequest 发起网络请求,DownloadHandlerTexture 作为发起下载图片,解析得到图片

2、下载地址不仅支持网络路径,电脑端和Android 手机端等路径也支持

 

三、注意事项

1、移动端,例如 Android 注意请给读写权限

2、因为要加载网络服务器上的图片,还需要网络开启哈

 

四、效果预览

 

五、实现步骤

1、打开Unity,新建工程

 

2、在场景上布局UI,显示加载的图片

 

3、新建脚本,编辑代码,把脚本挂载到 UI上,勾选是加载网络图片,还是电脑Android上的图片

 

4、注意,Android 注意 给读写权限

 

5、运行效果如上

 

六、关键代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadPicture : MonoBehaviour
{

    public bool isLoadNetImage = false;

    [SerializeField]
    // 网络上的图片,也可以加载
    private string url = @"http://a2.att.hudong.com/36/48/19300001357258133412489354717.jpg";
    RawImage rawImage;

    public string Url { get => url;
        set {
            url = value;
            GetTexture(url, SetTexttureToRawImage);
        }
    }

    private void Start()
    {
        rawImage = GetComponent<RawImage>();

        if (isLoadNetImage)
        {
            // 加载网络服务器的图片
            GetTexture(url, SetTexttureToRawImage);
        }
        else {

#if UNITY_EDITOR
            // 加载PC端上的图片
            GetTexture(@"D:\Tmp\Images\HappFish.png",
                SetTexttureToRawImage);
#else
        // 加载Android端的图片
        GetTexture(@"file:///storage/emulated/0/tencent/MicroMsg/WeiXin/mmexport1537166579555.jpg",
            SetTexttureToRawImage);
#endif

        }
                       
    }

    void SetTexttureToRawImage(Texture texture)
    {
        if (rawImage ==null)
        {
            rawImage = GetComponent<RawImage>();
        }
        rawImage.texture = texture;
    }

    /// <summary>
    /// 请求图片
    /// </summary>
    /// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
    /// <returns></returns>
    public void GetTexture(string url, Action<Texture2D> actionResult)
    {
        StartCoroutine(_GetTexture(url, actionResult));
    }

    /// <summary>
    /// 请求图片
    /// </summary>
    /// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
    /// <returns></returns>
    IEnumerator _GetTexture(string url, Action<Texture2D> actionResult)
    {
        UnityWebRequest uwr = new UnityWebRequest(url);
        DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
        uwr.downloadHandler = downloadTexture;
        yield return uwr.SendWebRequest();
        Texture2D t = null;
        if (!(uwr.isNetworkError || uwr.isHttpError))
        {
            t = downloadTexture.texture;
        }
        else
        {
            Debug.Log("下载失败,请检查网络,或者下载地址是否正确 ");
        }

        if (actionResult != null)
        {
            actionResult(t);
        }
    }
}

 

 

猜你喜欢

转载自blog.csdn.net/u014361280/article/details/107098189
今日推荐