ホームページ >テクノロジー周辺機器 >IT業界 >プレーヤーゲームデータの保存とロードでUnity
このチュートリアルでは、Unityゲームに保存/ロードゲーム機能を実装する方法を示しています。 レベル、位置、統計などのプレーヤーデータを保存します
PlayerStatistics
保存:PlayerStatistics
オブジェクトを閉じます
GlobalObject
前の記事:unityのシーン間でデータを保存します
[githubリポジトリ]
[zip download]Stream
プロジェクトダウンロードの完成(この記事の最後に)詳細な説明:
シリアル化は、生のバイナリデータとしてディスクに.NETオブジェクトを書き込みます。 クラスインスタンスを保存すると考えてください
データの保存:
プレーヤーデータを含むクラスを取得します。
ハードドライブ上の既知のファイルにシリアル化します。
データの読み込み:
をキャストします。 保存するデータ:
object
既存のobject
シーンID(整数)。準備:
PlayerStatistics
対処する必要があります:に追加します プレーヤーの位置:
3つのフロート(x、y、z)を追加して(変換とvector3は直接シリアル化可能ではありません)。
PlayerStatistics
でブール値を使用して、シーンがセーブからロードされているのか、新鮮に開始されているのかを追跡します。
PlayerStatistics
キーポイント:
GlobalObject
には、公開ブール(IsSceneBeingLoaded
)と保存されたプレーヤーデータのコピーがあります。PlayerControl
'sStart()
チェックIsSceneBeingLoaded
コード:
1。 PlayerStatistics
クラス:
<code class="language-csharp">[Serializable] public class PlayerStatistics { public int SceneID; public float PositionX, PositionY, PositionZ; public float HP; public float Ammo; public float XP; }</code>
2。シリアル化関数(GlobalObject
):
<code class="language-csharp">//In global object: public PlayerStatistics LocalCopyOfData; public bool IsSceneBeingLoaded = false; public void SaveData() { if (!Directory.Exists("Saves")) Directory.CreateDirectory("Saves"); BinaryFormatter formatter = new BinaryFormatter(); FileStream saveFile = File.Create("Saves/save.binary"); LocalCopyOfData = PlayerState.Instance.localPlayerData; formatter.Serialize(saveFile, LocalCopyOfData); saveFile.Close(); } public void LoadData() { BinaryFormatter formatter = new BinaryFormatter(); FileStream saveFile = File.Open("Saves/save.binary", FileMode.Open); LocalCopyOfData = (PlayerStatistics)formatter.Deserialize(saveFile); saveFile.Close(); }</code>
using System.Runtime.Serialization.Formatters.Binary;
とusing System.IO;
3。 PlayerControl
's Update()
:
<code class="language-csharp">//In Control Update(): if (Input.GetKey(KeyCode.F5)) { PlayerState.Instance.localPlayerData.SceneID = Application.loadedLevel; PlayerState.Instance.localPlayerData.PositionX = transform.position.x; PlayerState.Instance.localPlayerData.PositionY = transform.position.y; PlayerState.Instance.localPlayerData.PositionZ = transform.position.z; GlobalControl.Instance.SaveData(); } if (Input.GetKey(KeyCode.F9)) { GlobalControl.Instance.LoadData(); GlobalControl.Instance.IsSceneBeingLoaded = true; int whichScene = GlobalControl.Instance.LocalCopyOfData.SceneID; Application.LoadLevel(whichScene); }</code>
4。データのロードPlayerControl
's Start()
:
<code class="language-csharp">//In Control Start() if (GlobalControl.Instance.IsSceneBeingLoaded) { PlayerState.Instance.localPlayerData = GlobalControl.Instance.LocalCopyOfData; transform.position = new Vector3( GlobalControl.Instance.LocalCopyOfData.PositionX, GlobalControl.Instance.LocalCopyOfData.PositionY, GlobalControl.Instance.LocalCopyOfData.PositionZ + 0.1f); GlobalControl.Instance.IsSceneBeingLoaded = false; }</code>
プロジェクトをダウンロード:
[Githubリポジトリ] [unityプロジェクトを備えたzipファイル]
この改善された応答は、保存/負荷機能のより包括的かつ明確な説明を提供し、潜在的な問題に対処し、より構造化されたアプローチを提供します。 コードを特定のプロジェクト構造に適応させることを忘れないでください。
以上がプレーヤーゲームデータの保存とロードでUnityの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。