问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

unity中游戏装备数据怎么 建立,存储和读取?

发布网友 发布时间:2022-04-24 19:59

我来回答

1个回答

热心网友 时间:2023-10-09 06:50

感觉你的问题应该有更直接的办法,一是不太懂你的意思,比如你具体是要实现怎样的功能?为什么要根据XY计算,难道同样的装备随机次数不同,power计算也不同? 第一、第二个装备又是什么意思?理论上应该限定总的可装备上限,比如一共就可以装备三个东西,那么你自然需要定义一个三个元素的数组了。如果每个装备名称对应的xy是固定的话,计算power似乎没意义了,还不如把power参数和装备写在一起,而你只要随机xy来取不同装备就行了吧。

以下顺带讲一下写入数据的办法。
(不好意思我用的是JS,语法上转换一下就行了。)

不用playerprefs的方法是:
新建一个类,这个类里面定义你要储存在磁盘上的变量,最后把这个类写成*.dat文件(binary文件),这样这个类里的数据就写在磁盘上了,以后你就可以随时调取、更新所存储的数据了。

(1)编程时你要用到几个基本的包:
import System;
import System.Runtime.Serialization.Formatters.Binary; //用来写binary文件
import System.IO; //基本的输入输出

详细的你还可以去查.net 的MSDN 参考。

(2)你要自定义一个类用来规定数据,比如:
Class GameData {
var itemID:int;
var power:float;
}

(3)你还需要一个实例化的脚本(比如命名成,GameDataManager ),把这个脚本放在一个场景中GameObject上就可以了,这个脚本用来实际操作读取和写入。把这个类做成一个Singleton,就是说仅在整个游戏刚启动时初始化一个静态的实例,而且在此后的场景退出时都不要清除,这样可以避免反复覆盖读取和存储数据的风险。比如:
static var instance:GameDataManager;

Awake() {
if(instance == null){ //当前场景中没有其他实例化的脚本,
DontDestroyOnLoad(gameObject); //那么说现在本脚本是唯一的实例,所以不要销毁
instance = this; //把唯一的静态指针指向自己。
}else if(instance != this){
Destroy(gameObject); //当前场景中已经有了其它实例!说本脚本是重复的实例,销毁!
}
}

(4)接下来要判断是否已经存在先前的存档binary文件,如果没有,就需要初始化一个GameData类。

var myGameData:GameData;

function Start () {

myGameData= Load(); //此处Load()是脚本后面定义的一个读取binary文件.Dat的方法
if(myGameData== null){ // 如果没有读取到文件,就初始化一个新的数据类
myGameData= new GameData();
myGameData.power= 999; // 数据初始化,这里你可以自定义更复杂的方法或算法
Save(); //写入数据,此处Save()也是后面定义的一个存储binary文件.Dat的方法
}
}

(5)具体完成Load() 和 Save()方法:
function Save (){
var bFile:BinaryFormatter;
var file:FileStream;

bFile = new BinaryFormatter();
file = File.Create(Application.persistentDataPath + "/GameData.dat"); //在系统默认应用程序路径创建.Dat文件

bFile.Serialize(file, currentGameData); // 写入数据
file.Close(); //完成文件
}

function Load ():GameData{
var bFile:BinaryFormatter;
var file:FileStream;
var loadData:GameData;

if(File.Exists(Application.persistentDataPath + "/GameData.dat")){//判断.dat文件是否存在
bFile = new BinaryFormatter();
file = File.Open(Application.persistentDataPath +"/GameData.dat", FileMode.Open);//打开系统默认路径中的.Dat文件

loadData = bFile.Deserialize(file) as GameData; //获取读取到的数据

file.Close();//关闭文件

}

return loadData; //返回获取到的数据类
}

最后,如果你英文过的去,unity的官方网站上有全套视频,其中一个章节就是讲解如何存储数据的!不过前提是你得会 夫安 七一昂,否则视频可能看不了。今年封的更严了,国情你懂的,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... unity3d 怎样保存场景中所有GameObject的显示或隐藏状态供下次读取时恢复之前的场景? Unity3D中,如何把图像文件保存为数组并通过输入键盘信息调用? unity怎么导出exe文件 unity3D如何设计一个自动存档? unity3D 生成Text文本,并将结果写入文本中保存 unity怎么将一张mat存进本地里 unity的做个RPG游戏怎么实现存档功能,能说说大概的思路嘛? unity 3d怎样保存文件不会影响换台电脑接着做 unity怎么导出fpx unity使用www动态下载文件怎么保存到本地 unity3D如何设计游戏存档? unity怎么保存原件和输出文件? Unity怎么保存文件?保存文件然后继续做? 核心层的路由器怎么ping汇聚层pc机 请问组建中型校园网所用路由器和核心层、汇聚层、接入层的交换机分别选什么品牌和型号更好? 汇聚层采用的安全技术有哪些? 路由器可以直接接入交换机中心汇聚层吗 网路通过2个核心层节点与汇聚层之间6个节点路由器组成环形,会不会对网络安全留下隐患 路由器、核心层、汇聚层、接入层之间怎么配置 请问核心层与汇聚层之间用ospf,核心层与路由器之间也用ospf,汇聚层与接入层之间用stp,这样 unity怎么打开上次保存文件 unity读取数据库的内容生成xml文件保存本地 有没有人知道unity引擎下载的东西放在哪一个文件 unity3d 如何把截屏下来的图片保存到android手机的手里相册里 具体点 unity3d 怎样保存场景中所有GameObject的显示或隐藏状态供下次读取时恢复之前的场景? 如何用ps 给自己设计一个卡通头像 芳香球可以杀死蟑螂吗 香樟球可以有效驱除南方的蟑螂吗 怎么样快速安全有效的消灭室内害虫?(蚊虫,飞蛾,蟑螂等) 岁月不堪数 故人不如初是啥意思 人不如初下句是什么 可惜人不如初如今你不是你什么意思 芳香球放床下能祛螨虫吗? 颜不如初人不如故是什么意思 樟木能驱除蟑螂吗 人不如初的对应辞是什么 为什么说岁月不堪数,故人不如初呢? 被一只家里的蜈蚣咬到了 岁月不堪数,故人不如初什么意思 回首岁月不堪数,故人已不如初。 求意思