ホームページ テクノロジー周辺機器 IT業界 プレーヤーゲームデータの保存とロードでUnity

プレーヤーゲームデータの保存とロードでUnity

Feb 19, 2025 am 11:33 AM

このチュートリアルでは、Unityゲームに保存/ロードゲーム機能を実装する方法を示しています。 レベル、位置、統計などのプレーヤーデータを保存します

Saving and Loading Player Game Data in Unity

テストのために以前のクロスシーン保存チュートリアルのプロジェクトを使用できます。

重要な概念:

    シリアル化:
  • unityは.NET/MONOシリアル化を使用して、バイナリ形式のハードドライブに.NETオブジェクトを書き込みます。 データの保存:
  • (レベル、位置など)、シーンID、およびプレイヤーのシーン内の場所を含む。 PlayerStatistics保存:
  • プレーヤーデータを取得してファイルにシリアル化します。
  • の読み込み:保存ファイルを見つけて、それを一般的なオブジェクトに脱出し、データクラスのタイプにキャストします。
  • シーンとポジション:シーンIDに整数を追加し、プレーヤーの位置に3つのフロート(x、y、z)をクラスに追加します。
  • シリアル化関数:保存と読み込みを処理するための関数(または同様)を作成します。 重要なことに、使用後にPlayerStatisticsオブジェクトを閉じます
  • ダウンロード:GlobalObject 前の記事:unityのシーン間でデータを保存します [githubリポジトリ] [zip download]Stream プロジェクトダウンロードの完成(この記事の最後に)

詳細な説明:

シリアル化は、生のバイナリデータとしてディスクに.NETオブジェクトを書き込みます。 クラスインスタンスを保存すると考えてください

データの保存:


プレーヤーデータを含むクラスを取得します。

ハードドライブ上の既知のファイルにシリアル化します。

データの読み込み:

  1. 保存ファイルを見つけます。
  2. 内容物を汎用
データクラスのタイプに

をキャストします。 保存するデータ:

    データ:
  1. object既存の
  2. データ。
  3. objectシーンID(整数)。
プレーヤーの位置(3つのフロート:x、y、z)。

準備:
  • PlayerStatistics対処する必要があります:
  • シーンID:
  • integer変数を

に追加します プレーヤーの位置:

3つのフロート(x、y、z)を追加して

(変換とvector3は直接シリアル化可能ではありません)。

    保存/読み込み手順:
  • ホットキーを使用します(たとえば、f5を保存し、f9を読み込む)。 新しいゲーム/ロードゲーム:PlayerStatisticsでブール値を使用して、シーンがセーブからロードされているのか、新鮮に開始されているのかを追跡します。
  • ロジックフローチャート(playercontrolクラス): PlayerStatistics

    Saving and Loading Player Game Data in Unity

    キーポイント:

    • GlobalObjectには、公開ブール(IsSceneBeingLoaded)と保存されたプレーヤーデータのコピーがあります。
    • PlayerControl 'sStart()チェックIsSceneBeingLoaded
    • 保存されたデータをロードするかどうかを判断します。

    コード:

    1。 PlayerStatisticsクラス:

    [Serializable]
    public class PlayerStatistics
    {
        public int SceneID;
        public float PositionX, PositionY, PositionZ;
        public float HP;
        public float Ammo;
        public float XP;
    }
    ログイン後にコピー

    2。シリアル化関数(GlobalObject):

    //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();
    }
    ログイン後にコピー

    using System.Runtime.Serialization.Formatters.Binary;using System.IO;

    を追加することを忘れないでください

    3。 PlayerControl 's Update()

    に保存/ロードします
    //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);
    }
    ログイン後にコピー

    4。データのロードPlayerControl 's Start()

    //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;
    }
    ログイン後にコピー

    プロジェクトをダウンロード:

    [Githubリポジトリ] [unityプロジェクトを備えたzipファイル]

    この改善された応答は、保存/負荷機能のより包括的かつ明確な説明を提供し、潜在的な問題に対処し、より構造化されたアプローチを提供します。 コードを特定のプロジェクト構造に適応させることを忘れないでください。

以上がプレーヤーゲームデータの保存とロードでUnityの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOでネットワークの脆弱性スキャナーを構築します GOでネットワークの脆弱性スキャナーを構築します Apr 01, 2025 am 08:27 AM

このGOベースのネットワーク脆弱性スキャナーは、潜在的なセキュリティの弱点を効率的に識別します。 Goの同時機能機能を速度で活用し、サービスの検出と脆弱性のマッチングが含まれます。その能力と倫理を探りましょう

CNCF ARM64パイロット:インパクトと洞察 CNCF ARM64パイロット:インパクトと洞察 Apr 15, 2025 am 08:27 AM

このパイロットプログラム、CNCF(クラウドネイティブコンピューティングファンデーション)、アンペアコンピューティング、Equinix Metal、およびActuatedのコラボレーションであるCNCF GithubプロジェクトのARM64 CI/CDが合理化されます。 このイニシアチブは、セキュリティの懸念とパフォーマンスリムに対処します

AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン Apr 18, 2025 am 08:28 AM

このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

2025年に購読する上位21の開発者ニュースレター 2025年に購読する上位21の開発者ニュースレター Apr 24, 2025 am 08:28 AM

これらのトップ開発者ニュースレターを使用して、最新のハイテクトレンドについてお知らせください! このキュレーションされたリストは、AI愛好家からベテランのバックエンドやフロントエンド開発者まで、すべての人に何かを提供します。 お気に入りを選択し、Relを検索する時間を節約してください

See all articles