数据存储,资源管理和加载

数据存储
PlayerPrefs 游戏存档
作用:在游戏会话中储存和访问游戏存档。
存储路径:
Mac OS X: ~/Library/Preferences/Unity/WebPlayerPrefs
Windows: %APPDATA%\Unity\WebPlayerPrefs
一个游戏存档文件对应一个web播放器URL并且文件大小被限制为1MB。如果超出这个限制,SetInt、SetFloat和SetString将不会存储值并抛


出一个PlayerPrefsException。


PlayerPrefs 类方法
SetInt:设置由key确定的参数值
GetInt:如果存在,返回偏好文件中key对应的值
SetFloat:设置由key确定的参数值
GetFloat:如果存在,返回游戏存档文件中key对应的值
SetString:设置由key确定的参数值
GetString:如果存在,返回游戏存档文件中key对应的值
HasKey:如果key在游戏存档中存在,返回true
DeleteKey:从游戏存档中删除key和它对应的值
DeleteAll:从偏好中删除所有key。请谨慎使用


Xml
XmlDocument类: XmlDocument类的对象代表了一个XML文档
Load:加载指定的xml数据
Save:将XML文档保存到指定的位置
CreateElement:创建元素
AppendChild:添加节点
SelectSingleNode:选择文档中匹配表达式的第一个节点


用脚本创建XML文件首先需要在脚本开头添加using System.Xml;


XmlElement类
节点类:XmlNode类与XmlElement类区别 
XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子类。我们知道子类继承了父类所有的属性和方法,


因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可以使用的。
XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument实例通过CreateNode创建。
XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。


但是XmlElement专门指的就是元素节点。


XmlNode和XmlElement。这两个类的功能极其类似: 1、通过继承关系XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知


XmlElement是XmlNode的子类。我们知道子类继承了父类所有的属性和方法,因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可


以使用的。 2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这


多种节点的统称。但是XmlElement专门指的就是元素节点。 3、XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过


XmlDocument实例通过CreateNode创建。 4、XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作(XmlNode也


可以通过Attributes属性获取属性列表)。 5、在网上看到有人这么评论这两个类的区别:XmlNode包含子节点,XmlElement只包含属性及


其本身不含有子节点。但是我通过代码测试,发现即使是XmlElement,也可以通过ChildNodes来获取子节点列表。虽然在断点中断模式下,


我并没有发现XmlElement有ChildNodes属性。举例如下: //是XmlNode也是XmlElement,但是img以及aspnet.jpg只是XmlNode 


       //既是XmlNode 也是XmlElement             C#      //只是XmlNode   


          也就是元素节点可以相应转换为XmlElement,这样既可以使用XmlNode的功能,也可以使用它特有的对属性的操作


方法。 任意节点都可以使用XmlNode,因为XmlNode是所有Node的父类。




InnerText(属性):获取或设置节点及其所有子级的串联值
SetAttribute:设置具有指定名称的特性的值
GetAttribute:返回具有指定名称的特性的值
RemoveAttribute:按名称移除特性
AppendChild:将指定的节点添加到该节点的子节点列表的末尾


http://msdn.microsoft.com/zh-cn/library/system.xml.xmlelement.aspx


Json
JSON 是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言
JSON 具有自我描述性,更易理解
需要将LitJson.dll文件放在Assets文件夹下
按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:
{ "firstName": "Brett" } 
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:firstName=Brett 
但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" } 


http://www.cnblogs.com/TDYToBaby/archive/2010/05/13/1734357.html


值的数组
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。
例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用 JSON,就只需将多个带花括号的记录分组在


一起。


1.对象是属性、值对的集合。一个对象的开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。
2.数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。
3.值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。
4.字符串和数字的定义和C或Java基本一致。

5.JSON 提供了一种优秀的面向对象的方法,以便将元数据缓存到客户机上。


资源管理和加载
AssetBundle
AssetBunle是Unity引擎提供的一种用于存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,例如模型、纹理、音效、动


画片段甚至数个场景等。
开发者可以在游戏运行时从服务器上的AssetBunle包中提取资源,从而实现资源的动态加载


Resources资源读取
在使用AssetBunle之前首先介绍下Resources资源读取,资源读取是将Project工程列表中的Asset资源通过名称读取到内存后进行实例化使用


,Resources.Load可针对任何游戏中可使用的资源类型。
Resources.Load(“Name”,type);
注意:如果直接从Project列表中加载资源需要建立Resources文件夹将资源放在其中


资源类中的各个方法
FindObjectsOfTypeAll:返回Type类型的所有物体的一个列表
Load:加载储存在Resources文件夹中path处的资源
LoadAll:加载Resources文件夹中的path文件夹或者文件中的所有资源
LoadAssetAtPath:返回所在资源路径上的一个资源
UnloadUnusedAssets:卸载未使用的资源


AssetBundle打包资源
用户可以使用Unity脚本在Unity编辑器中创建AssetBunle文件,Unity提供了3种创建AssetBunle的方法:
BuildPipeline.BuildAssetBundle
BuildPipeline.BuildStreamedSceneAssetBundle
BuildPipeline.BuildAssetBundleExplicitAssetNames


BuildAssetBundle方法
BuildPipeline.BuildAssetBundle:
通过该命令,用户可以将编辑器中任意类型的资源打包成AssetBundle
bool BuildAssetBundle (Object mainAsset  , Object[] assets , string pathName , BuildAssetBundleOptions 


options  =BuildAssetBundleOptions.CollectDependencies  |


 BuildAssetBundleOptions.CompleteAssets, BuildTarget = BuildTarget.WebPlayer targetPlatform ) :


mainAsset:用于指定该AssetBunle文件中的主要资源,该资源可通过AssetBunle. mainAsset来直接进行读取
assets:用于指定该AssetBunle文件包含的资源
pathName:用于指定该AssetBunle文件的创建地址
assetBunleOptions:用于指定该AssetBunle文件的创建选项,默认情况下为Collect Dependencies和CompletAssets
targetPlatform:用于指定该AssetBundle文件所用于的发布平台


BuildStreamedSceneAssetBundle方法
BuildPipeline.BuildStreamedSceneAssetBundle:
通过该命令,用户可以直接将项目中的一个或若干个场景以流式加载的方式打包成AssetBundle文件
string BuildStreamedSceneAssetBundle (string[] levels , string  locationPath , BuildTarget  target ) 
levels:用于指定要打包进入AssetBunle文件的场景名称
locationPath:用于指定该AssetBunle文件的创建地址
target:用于指定该AssetBunle文件所用于发布的平台


BuildAssetBundleExplicitAssetNames
BuildPipeline.BuildAssetBundleExplicitAssetNames:
该命令功能与BuildPipeline.BuildAssetBundle方法相同,但创建时可以为每个Object指定一个自定义的名字。


bool BuildAssetBundleExplicitAssetNames (Object[] assets , string[] assetNames, string 


pathName, BuildAssetBundleOptions assetBundleOptions   =BuildAssetBundleOptions.CollectDependencies |


 BuildAssetBundleOptions.CompleteAssets, BuildTarget targetPlatform  = BuildTarget.WebPlayer) :
assetNames参数用于指定AssetBundle文件中的资源名称,其它参数参考BuildPipeline.BuildAssetBundle方法


非缓存机制
通过创建一个WWW实例来对AssetBunle文件进行下载,下载后的AssetBundle文件将不会进入Unity引擎特定的缓存区


缓存机制
通过WWW.LoadfromCacheorDownload接口来下载AssetBundle文件。下载后的AssetBundle将自动被存放在Unity引擎特定的缓存区内,该方法


是Unity推荐的AssetBundle文件下载方式。


从AssetBundle中加载Assets
AssetBundle.Load:可以通过名字来将AssetBundle文件中包含的对应Asset加载到内存中,也可以通过参数来指定加载Asset的类型
AssetBundle.LoadAsync:作用与AssetBundle.Load相同,不同的是该方法是对Asset进行异步加载,即时加载时主线程可以继续执行,所以


该方法适用于加载一个较大的Asset或者同时加载多个Assets
AssetBundle.LoadAll:一次性加载AssetBundle文件中的所有Assets,同AssetBundle.Load一样,可以通过指定加载Asset的类型来选择性地


加载Assets。


卸载AssetBundle
Unity提供了AssetBundle.Unload接口来卸载AssetBundle文件,它的完整定义如下
void Unload ( bool unloadAllLoadedObjects ) 
该方法有一个bool参数。如果把该参数设置成false,则调用该方法时只会卸载AssetBundle自身,并不会对从AssetBundle中加载的Assets有


任何影响;如果把该参数设置程true,则除了AssetBundle对象自身,所有从当前AssetBundle中加载的Assets也会被同时卸载,无论它们是


否还在被使用。建议将该参数设置成false。只有当很明确地知道从AssetBundle中加载的Assets不再会被任何其它对象引用的时候,才设置


成true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值