IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity使用I/O数据流操作文件(读写文本、选择本地图片加载、选择文件并计算其大小) -> 正文阅读

[游戏开发]Unity使用I/O数据流操作文件(读写文本、选择本地图片加载、选择文件并计算其大小)

工作开发中经常使用I/O数据流技术操作文件,包括读写文本,加载本地图片和其他文件等,这里我们使用I/O流很方便就能完成。通过本博客你就可以学习到如何使用I/O流操作文本啦!

简单搭建demo场景

在这里插入图片描述
1.用一个输入框(InputFiel组件)输入我们想要写入文本文件的内容,点击读取按钮的时候我们可以从文本文件里读取我们刚才写入的内容。
在这里插入图片描述
2.点击选择一个模型按钮可以打开本地资源浏览器,当我们选择一个模型后,可以计算这个模型的大小并显示到Text上。
点击选择一张图片按钮可以打开本地资源浏览器,选择图片后加载并显示到Image上。

脚本实现I/O流操作文件

引用命名空间并定义UI组件

using UnityEngine;
using UnityEngine.UI;
using System.IO;
using Crosstales.FB;
public class IOtest : MonoBehaviour
{
    public InputField input;//输入框
    private string txtPath;//txt文本文件路径

    public Text readText;//读取的文本
    public Button readBtn;//读取按钮

    public Image img;//加载的图片
    public Button selectImgBtn;//选择图片按钮

    public Button calculateBtn;//选择模型按钮
    public Text calculateText;//计算模型大小
}

在Start函数里为添加各个组件的监听方法

void Start ()
    {
        //添加事件监听
        input.onEndEdit.AddListener(OnInputEndEdit);
        readBtn.onClick.AddListener(OnReadBtnClick);
        selectImgBtn.onClick.AddListener(OnSelectImgClick);
        calculateBtn.onClick.AddListener(OnCalculateClick);
        txtPath = Application.dataPath + "/unity.txt";//工程目录Assets文件下
	}

将输入框内容写入文本文件

/// <summary>
    /// 输入结束写入文本文件
    /// </summary>
    /// <param name="value"></param>
    private void OnInputEndEdit(string value)
    {
        if (!string.IsNullOrEmpty(value))
        {
            //写入方式一,如果文件unity.txt不存在,则创建改文件,并写入字符串
            FileStream fs = new FileStream(txtPath, FileMode.OpenOrCreate);//将在Assets下创建unity.txt文本文件
            StreamWriter writer = new StreamWriter(fs);
            writer.WriteLine(value);
            writer.Close();

            //写入方式二
            //File.WriteAllText(txtPath, readText.text);

            print("写入完毕");
        }
    }

读取文本文件内容并显示

/// <summary>
    /// 读取文本文件
    /// </summary>
    private void OnReadBtnClick()
    {
        if (File.Exists(txtPath))
        {
            //读取方式一
            //StreamReader sr = new StreamReader(txtPath);
            //readText.text = sr.ReadToEnd();
            //sr.Close();

            readText.text = File.ReadAllText(txtPath);//读取方式二
        }
    }

选择本地图片加载并显示

/// <summary>
    /// 选择一张图片加载赋值给img
    /// </summary>
    private void OnSelectImgClick()
    {
        ExtensionFilter[] eFilters = new ExtensionFilter[1];
        eFilters[0] = new ExtensionFilter("图片格式", "png", "jpg");//规定图片格式
        string imgPath = FileBrowser.OpenSingleFile("请选择一张图片", "", eFilters);//放回图片的本地路径

        if (File.Exists(imgPath))//判断文件是否存在
        {
            FileStream fs = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
            byte[] imgBytes = new byte[fs.Length];
            fs.Read(imgBytes, 0, imgBytes.Length);//读取图片字节块写入指定的缓冲区imgBytes
            fs.Close();
            fs.Dispose();
            Texture2D tex = new Texture2D(10, 10);
            tex.LoadImage(imgBytes);
            Sprite sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero);
            img.sprite = sprite;
        }
    }

选择本地模型并计算其文件大小

/// <summary>
    /// 计算模型文件大小
    /// </summary>
    private void OnCalculateClick()
    {
        string extension = "fbx";
        string fbxPath = FileBrowser.OpenSingleFile("请选择一个模型", "", extension);
        string fbxName = Path.GetFileName(fbxPath);//获取文件名
        if (File.Exists(fbxPath))
        {
            FileStream fs = new FileStream(fbxPath, FileMode.Open, FileAccess.Read);
            byte[] fbxBytes = File.ReadAllBytes(fbxPath);//读取模型字节
            calculateText.text = string.Format("你打开的文件是:{0},共{1}字节,{2}kb,{3}M", fbxName, fbxBytes.Length, fbxBytes.Length / 1024, (fbxBytes.Length / 1024.0 / 1024.0).ToString("f2"));
            print(fbxBytes.Length / 1024 / 1024);
        }
    }

注意事项及其他知识点

在这里插入图片描述

demo演示效果

  • 读写文本
    请添加图片描述
    在这里插入图片描述

  • 选择图片
    请添加图片描述

  • 选择模型

请添加图片描述
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:52:21  更:2022-05-05 11:54:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:01:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码