Unity 中加载外部图片文件,可动态更换图片

Unity读取图片并显示到UI中 Unity读取图片并显示到UI中方法一:将图片转换成字符串代码解释效果图方法二:将图片转换成字节数组 方法一:将图片转换成字符串 读取存放在磁盘中的图片,然后将图片转换成字节数组,再将字节数组转换成字符串,此时可以将转换后的字符串作为传输介质,比如进行网络传输,可以传输该字符串;在使用时,将字符串转换为字节数组,再将字节数组转换为Texture,最后在UI上显示。 代码 using System; using System.IO; using UnityEngine; using UnityEngine.U 阅读详情

根据自己的项目需求灵活地调整代码逻辑

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

/// <summary>
/// 此类为加载外部图片文件,可动态替换图片---
/// 第一种方法:首先获取文件夹中所有文件名称,将其添加到Image列表中,根据列表加载文件夹中的图片--
/// 第二种方法:直接获取文件夹中的文件名称,根据文件名称下载对应的图片--
/// </summary>
public class LoadTextureManager : MonoBehaviour
{
    [Header("图片的父物体")]
    [SerializeField]
    private Transform imageRoot;

    private List<string> imgNameList = new List<string>();

    void Start()
    {
        #region 第一种方法
        //GetAllImageName("Citys");
        //GetAllImage("Citys");
        #endregion

        #region 第二种方法
        GetAllImageName("Citys");
        #endregion
    }

    #region 获取文件夹中文件的名称相关函数
    /// <summary>
    /// 获取文件夹中所有的图片名称
    /// </summary>
    /// <param name="floderName">文件夹名称</param>
    private void GetAllImageName(string floderName)
    {
        if (string.IsNullOrEmpty(floderName))
        {
            Debug.LogError($"floderName的值为空{floderName},请输入正确的文件夹名称!!");
        }
        else
        {
            string loadPath;//读取文件的路径
            if (Application.platform == RuntimePlatform.Android)
            {
                loadPath = "/storage/emulated/0/" + floderName;
                //Debug.LogError($"安卓端图片读取::{loadPath},");
            }
            else
            {
                loadPath = Application.streamingAssetsPath + "/" + floderName;
                //Debug.Log($"PC端图片读取::{loadPath},");
            }
            //判断floderName文件夹是否存在
            if (Directory.Exists(loadPath))
            {
                DirectoryInfo direction = new DirectoryInfo(loadPath);
                FileInfo[] fileInfos = direction.GetFiles("*", SearchOption.AllDirectories);
                if (fileInfos.Length.Equals(0))
                    Debug.LogError(floderName + "文件夹为空");
                for (int i = 0; i < fileInfos.Length; i++)
                {
                    if (fileInfos[i].Name.EndsWith(".png"))
                    {
                        string imgName = fileInfos[i].Name;
                        AddImageName(imgName);
                        #region 第二种方法
                        DownloadTexture(floderName, imgName);
                        #endregion
                    }
                    else if (fileInfos[i].Name.EndsWith(".jpg"))
                    {
                        string imgName = fileInfos[i].Name;
                        AddImageName(imgName);
                        #region 第二种方法
                        DownloadTexture(floderName, imgName);
                        #endregion
                    }
                }
            }
        }
    }

    /// <summary>
    /// 将文件夹中文件的名称添加到列表中
    /// </summary>
    /// <param name="_name"></param>
    private void AddImageName(string _name)
    {
        if (!imgNameList.Contains(_name))
        {
            imgNameList.Add(_name);
        }
        else
        {
            Debug.LogError("重名图片,请检查:" + _name);
        }
    }
    #endregion

    #region 下载图片相关函数
    /// <summary>
    /// 获取文件夹中所有图片
    /// </summary>
    /// <param name="floderName"></param>
    public void GetAllImage(string floderName)
    {
        if (string.IsNullOrEmpty(floderName))
        {
            Debug.LogError($"floderName的值为空{floderName},请输入正确的文件夹名称!!");
        }
        else
        {
            for (int i = 0; i < imgNameList.Count; i++)
            {
                DownloadTexture(floderName, imgNameList[i]);
            }
        }
    }

    /// <summary>
    /// 开始协同程序下载图片
    /// </summary>
    /// <param name="floderName"></param>
    /// <param name="imgName"></param>
    private void DownloadTexture(string floderName, string imgName)
    {
        StartCoroutine(IEDownloadTexture(floderName, imgName));
    }

    /// <summary>
    /// UnityWebRequest下载图片--
    /// </summary>
    /// <param name="floderName">文件夹名称</param>
    /// <param name="imgName"></param>
    /// <returns></returns>
    private IEnumerator IEDownloadTexture(string floderName, string imgName)
    {
        string path = /*"file:///" +*/ Application.streamingAssetsPath + "/" + floderName + "/" + imgName;
        using (UnityWebRequest wr = UnityWebRequestTexture.GetTexture(path))
        {
            yield return wr.SendWebRequest();
            if (!wr.isNetworkError || !wr.isHttpError)
            {
                Texture2D texture = DownloadHandlerTexture.GetContent(wr);
                Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero, 1f);
                CreateImage(sprite, imgName);
            }
            else
            {
                Debug.LogError(wr.error);
            }
        }
    }

    /// <summary>
    /// 创建新的Image
    /// </summary>
    /// <param name="sprite"></param>
    private void CreateImage(Sprite sprite, string _Name)
    {
        GameObject gameObject = new GameObject(); //新建一个物体
        string[] strArray = _Name.Split('.');
        string imgName = strArray[0];
        gameObject.name = imgName;
        gameObject.AddComponent<Image>().sprite = sprite;//将下载的图片添加到物体Iamge中

        if (imageRoot != null)
            gameObject.transform.SetParent(imageRoot);//设置新建物体的父类
    }
    #endregion
}

√ Unity3D - 怎么利用代码修改Image组件的图片 1、Image组件显示的图片由SourceImage属性控制,SourceImage属性是Sprite类型的,不是Texture2D类型的,因此需要将Texture2D类型的图片转换成Sprite类型才能赋给SourceImage属性。 2、下面利用一个定时器实现自动切换图片的效果。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public clas 阅读详情

相关推荐

【Unity教程】如何动态更换精灵图片&在图集中更换精灵图片

参考文章:1.unity3d 更换sprite renderer中sprite的图片 2.制作精灵(UI Sprite) 3.Unity2D动态设置SpriteRender的Sprite(Multipe) 4.Unity3D的NGUI中如何在精灵中导入自定义的图片 5.Unity为Image组件动态添加sprite Spri

BuladeMian的博客,菜得抠脚,菜得真实 1万+

Unity 动态更换Image图片 && UI自适应

一、动态更换Image图片 前提:Image源文件必须存放在自行创建的文件夹[Resources]中 方式一:typeof 类型 Resources.Load()动态更换Image Image img; //image路径 string path = "Images/Item/img"; //参数为资源路径和资源类型 Sprite sprite = Resources.Load(path,typeof(Sprite)) as Sprite; //动态更换image Img.sprite = sprite;

圈池 1万+

Unity中用代码动态改变材质球贴图

首先先把贴图放在Resources文件夹下,或者新建一个文件夹,便于管理。 并命好名,方便遍历。 创建脚本,挂在要动态改变的物体上。 using System.Collections; using System.Collections.Generic; using UnityEngine; /* * * Writer:June * * Date: 2019.9.11...

小小小小羽的博客 2万+

Unity中读取外部图片

【代码】Unity中读取外部图片。 在unity开发中有时候需要加载外部图片,这里有个简单读取图片方法

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 1369

【Unity&UGUI】动态改变精灵物体的图片

Sprite Packer打包 动态改变精灵物体的图片 1.改变这个原有的精灵的图片 2.在资源库里面生成一个新的精灵 ---------1.改变这个原有的精灵的图片 首先在这个。CS文件类下面声明一个SpriteRenderer变量 private SpriteRenderer image; 在Start初始化函数里面,初始化上面声明

BuladeMian的博客,菜得抠脚,菜得真实 1万+

Unity3D实现图片动态切换显示

在Unity3D中,我们经常需要在游戏中动态切换显示不同的图标。在Unity编辑器中,创建一个UI元素(如Image或RawImage),用于显示图标。首先,我们需要准备一组不同的图标资源,这些图标将用于在切换时显示不同的图片。然后,它将新的图标赋值给UI元素的Image组件。创建一个C#脚本,该脚本将用于在图标之间进行切换,并将其附加到UI元素上。在游戏运行时,点击UI元素将触发图标的切换。方法在脚本启动时被调用,它获取UI元素的Image组件,并将初始图标显示在UI元素上。希望这篇文章对你有所帮助!

VspAnaconda的博客 1218

Unity实现动态更换程序待机图片

Unity实现动态更换程序待机图片 前言 在之前的公司做过一些项目,项目有过这样的需求:软件的待机界面需要可以动态更换,这样既可以方便调试人员的工作,又可以节省开发人员的工作时间,可谓是一举两得。在之前的公司做项目一直对这个功能未做整理,所以在这里整理一下。 步骤 1.在项目下建立StreamingAssets文件夹,并在此文件夹下建立Pictures文件夹,如下图所示: 2.在项目中搭建一个I...

波波斯维奇 893

Unity Shader 之 实现简单的动态过场切换图片的效果

Unity Shader 之 实现简单的动态过场切换图片的效果 目录 Unity Shader 之 实现简单的动态过场切换图片的效果 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、关键代码 一、简单介绍 Shader Language的发展方向是设计出在便携性方面可以和C++、Java等相比的高级语言,“赋予程序员灵活而方便的编程方式”,...

仙魁XAN 4790

Unity2D更换图片纹理实现动画

Unity2D更换图片纹理实现动画 目录 Unity2D更换图片纹理实现动画 思路分析 一、基本功能的实现 代码分析: 二、功能扩展 1.想要扩展的功能 2.具体的代码: 3.代码分析: 总结 思路分析 用途:在2D游戏里或者游戏的2D界面中,我们会经常发现一些动态图片,实现了动画的效果。动态图片的实现让画面更具有动感,更能吸引玩家的眼球,给玩家更好的视觉体验。当然也可以用来实现一些2D特效,比如炸弹爆炸等。 实现思路:图片是有纹理的,我们可以通过代码动态的修改纹理,计算机执.

qq_37160769的博客 2025

五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器

本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分五个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解 五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器 也就是本文 ...

okgwf的博客 4136

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

Unity开发之实现更换鼠标图片

在玩游戏的时候,感觉游戏里的鼠标图片特酷炫,23333,今天我就总结了两种方法! 我是做Unity开发的,所以方法仅针对于Unity平台。。。。。。。。 方法如下: 1、Unity客户端直接更改,步骤:File-->Build Settings-->Player Settings-->Default Cursor 注意:记得要将图片的Texture T...

anji6658的博客 1070

超详细 | 贝叶斯网络基础——有图有真相

Hello,大家好,我是starz。这是本系列的第二篇《概率基础Ⅱ》,虽说是概率基础,但作为过渡,它开始以图为载体 这节的主要内容有: 贝叶斯网络 三种结构 D-划分 贝叶斯球 马尔科夫毯 应用例子 总结 让我们开始吧 :3 贝叶斯网络 概率图模型可笼统分为两类,一是基于无向图的马尔科夫网络: 二是基于有向图的贝叶斯...

qq_41603411的博客 2万+

Unity中通过ButtonClicked更换GameOgject纹理图片

在Assets文件夹下新建一个Resources文件夹,将所需要加载的图片放到该文件夹下 图片以1、2、3、4......命名 using UnityEngine; using System.Collections; using System; public class SwitchPic: MonoBehaviour { private Texture2D MyTexture; private string SerialNumber; private int number =

KillMeHealMe的博客 653

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2613

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 209

[Unity][NGUI]如何动态更换NGUI图片

如何动态更换同一图集的NGUI图片 首先目标的组件为NGUISprite而不是NGUITexture。 ... if (trans != null//目标图片 && name.Length > 0//图片的名字,这个名字必须为相同图集里面所包含的对象 && trans.GetComponent<UISprite>() != null) { trans.G...

BuladeMian的博客,菜得抠脚,菜得真实 600

allegro如何设置走线等长

设置走线等长!

weixin_42499230的博客 6926

Unity动态更换图片

博主写的是五秒倒计时后开始游戏,用图片显示倒计时数字,由于初学Unity所以方法可能不太好,但不失为一种解决方法。 using UnityEngine; using System.Collections; using UnityEngine.UI;//别忘加了 public class GameController : MonoBehaviour { public Sprit...

weixin_30624825的博客 575

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2576

修改legged_gym地形后仍然是平地,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1563

Unity中通过按键更换材质球纹理图片

在Assets文件夹下新建一个Resources文件夹,将所需要加载的图片放到该文件夹下。 其中num=4因为当前文件夹下只放了4张图片。 {优快云:CODE:1867644}

Ag490763423的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

UGUI中动态更换图片

/// <summary> /// UGUI中Image更换图片《sprite图片必须放在Resources文件夹下》 /// </summary> /// <param name="image">Image</param> /// <param name="...

gaodi_123的博客 674

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

unity 更换image的Source

//声明一张imagepublic Image Bg;//声明更换的图片序号int ImageNum=1;private string Res_BGPath = "Image/BackGround/"; //背景路径//更换路径Bg.GetComponent&lt;Image&gt;().sprite = Resources.Load(Res_BGPath + ImageNum, typeof(...

岁月静好 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Unity鼠标图标更换/点击图标更换

Unity鼠标图标更换/点击图标更换 效果展示: 代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseController : MonoBehaviour { public Texture2D crosshairTexture;//设置图标的图片 public Texture2D crosshai2;//替换贴图 Texture2D

Z_hongli的博客 2437

ugui Sprite更换图片

//ugui 更换图片  si.sprite = Resources.Load("texture/ui/lv0000" + i, typeof(Sprite)) as Sprite;

gametouch的博客 2039
上一篇: Unity 中实现一个碰撞体(Collider)管理类监测多个物体触发事件
下一篇: Unity 共享函数整理【一】
科幻之眼
博客等级 码龄9年 101粉丝 153原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值