Unity各平台本地路劲问题

本文介绍了一个Unity脚本,用于实现跨平台(包括iOS、Android和PC)的本地文件读写功能。脚本能自动适配不同平台的文件路径,并提供文件创建与读取的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各平台本地路径问题, 此路径不是 Unity工程中 Assets 文件加下的路径, 在PC端为本地路径,在移动端为沙盒路径,所以文件存储在 Unity工程Assets下,在移动端是不能用如下方法读取的

将代码挂在摄像机上运行即可

using UnityEngine;
using System.Collections;
using System.IO;

public class Read : MonoBehaviour {

    private string path = "";
    string content = "";
	// Use this for initialization
	void Start () {
         path = Application.persistentDataPath;
        //获取本地路径
        //在iphone,Android平台上为沙盒路径, 在PC端为 本地 路径,  切记不是在Unity工程中“Assets”下的路径
#if ((UNITY_IPHONE || UNITY_ANDROID) && (!UNITY_EDITOR))
        path += "/Documents";
#else
        path = Application.dataPath; // PC端,本地路径
#endif
        //如果平台上该路径不存在,即没有相应的文件夹,按照该路径创建一个
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
	}

    void OnGUI()
    {
        if (GUI.Button(new Rect(50, 50, 200, 50), "Read"))
        {
            //读取文件
            ReadMyTxt(path, "AAA.txt");
        }

        if (GUI.Button(new Rect(50, 150, 200, 50), "Create"))
        {
            CreateTxt(path, "AAA.txt", "aaaaaaaaaabbbbbbbbbbcccccccccdddddddddd");
        }

        if (GUI.Button(new Rect(50, 300, 200, 50), "Clear"))
        {//清空数据
            content = "";
        }

        GUI.Label(new Rect( 50, 500, 300, 80), "path   :  " + path);
        GUI.Label(new Rect(50, 600, 300, 80), "content   :  " + content);
    }

    //读取txt文件,参数1为路径,参数2为文件名(要带后缀)
    private void ReadMyTxt(string path, string txtName)
    {
        string sss = path + "/" + txtName;
        if (!File.Exists(sss)) //如果文件不存在退出
        {
            content = "!Exists " + sss;
            return;
        }

        try
        {
            //实例化文件流,参数1 路径,参数2文件操作方式
            FileStream file = new FileStream(sss, FileMode.Open);
            StreamReader sr = new StreamReader(file);
            content = sr.ReadToEnd(); //从文件头读取到文件尾
            sr.Close();  //关闭流释放空间
            file.Close(); 
        }
        catch{}
    }
    //创建文件,参数1 路径,参数2 文件名,参数3 写入信息
    private void CreateTxt(string path, string txtName, string info)
    {
        string sss = path + "/" + txtName;
        try
        {
            StreamWriter sw;
            FileInfo t = new FileInfo(sss);
            //如果文件不存在则创建一个
            if (!t.Exists)
            {
                sw = t.CreateText();
            }
            else
            {
                sw = t.AppendText();
            }
            //写入信息
            sw.WriteLine(info);
            sw.Close();
            sw.Dispose();
        }
        catch {}
    }
}


本脚本适合在有服务器的情况下,项目更新时从服务器加载一些文件,然后将文件写入到本地(在移动平台为写入沙盒)

注意:在Unity项目中Assets下创建的文件夹,里边存放的一些文件,在安装时,是不会写入到移动端的沙盒路径内的,所以如果在开发中本来已经放入工程中的文件信息,用该方法是读取不到文件的。


(至于在项目中存放的文件信息如何读取,请在后续本人后续的博客中寻找)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值