【发布时间】:2017-01-03 22:34:32
【问题描述】:
该游戏是一款开放世界游戏,您可以在其中行走和驾驶不同的车辆并在地面上放置建筑物。因为世界很大,我希望玩家和不同的车辆/结构留在他们离开的地方。出于这个原因,我需要以某种方式存储位置、旋转、时间戳、材质等。首先我想到了 PlayerPrefs,但我读到的内容并不那么安全。所以我开始做我自己的二进制文件,这就是我到目前为止所得到的:
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class SaveLoad : MonoBehaviour {
public static void SavePlayer(){
BinaryFormatter bf = new BinaryFormatter ();
FileStream stream = new FileStream (Application.persistentDataPath + "ftv.gha", FileMode.Create);
PlayerData data = new PlayerData ();
bf.Serialize (stream, data);
stream.Close ();
}
public static float[] LoadPlayer(){
if (File.Exists (Application.persistentDataPath + "ftv.gha")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream stream = new FileStream (Application.persistentDataPath + "ftv.gha", FileMode.Open);
PlayerData data = bf.Deserialize (stream) as PlayerData;
stream.Close ();
return data.position;
} else {
Debug.LogError ("File does not exist.");
return new float[]{0,0,0};
}
}
}
[Serializable]
public class PlayerData
{
public float[] position;
public PlayerData(){
position = new float[3];
position[0] = GameObject.Find ("Astronaut").transform.position.x;
position[1] = GameObject.Find ("Astronaut").transform.position.y;
position[2] = GameObject.Find ("Astronaut").transform.position.z;
}
}
使用此脚本,我可以保存和加载仅一个游戏对象(玩家)的数据。问题是我还需要保存 6-7 辆车。玩家也可以在世界各地进行 20-30 次演习,我还需要保存这些数据。我什至不会从其他不那么重要的事情开始。
为每个对象复制粘贴此代码听起来很糟糕,但在 YouTube 上观看了数十个视频(并对其进行了 20 多个小时的测试)后,我还没有找到任何答案。我找到了两种视频:
- 说明如何保存一个对象的等级、生命值和强度
- 说明如何保存一个对象的位置
所以。有没有更好的方法来实现我想要解释的内容,还是我做错了什么?
有人请指点我正确的方向,这样我终于可以开始扩大规模了。
【问题讨论】:
标签: c# unity3d save binaryfiles