Rumah > Peranti teknologi > industri IT > Menyimpan dan Memuatkan Data Permainan Pemain dalam Perpaduan

Menyimpan dan Memuatkan Data Permainan Pemain dalam Perpaduan

Jennifer Aniston
Lepaskan: 2025-02-19 11:33:10
asal
481 orang telah melayarinya

Tutorial ini menunjukkan kepada anda bagaimana untuk melaksanakan fungsi Simpan/Beban Permainan dalam Permainan Perpaduan anda. Kami akan menyimpan data pemain seperti tahap, kedudukan, dan statistik.

Saving and Loading Player Game Data in Unity

anda boleh menggunakan projek ini dari tutorial penjimatan silang silang sebelumnya untuk ujian.

Konsep Utama:

  • Serialization: Kesatuan Penggunaan .NET/Mono Serialization Untuk menulis objek .NET ke cakera keras dalam bentuk binari.
  • Data disimpan: Termasuk (tahap, kedudukan, dll), ID adegan, dan lokasi di tempat kejadian pemain. PlayerStatistics
  • SAVING: Dapatkan data pemain dan bersiri ke fail.
  • Memuatkan: Cari fail simpan, deserialize ke dalam objek generik, dan masukkannya ke jenis kelas data anda.
  • adegan & kedudukan: Tambahkan integer untuk ID adegan dan tiga terapung (x, y, z) untuk kedudukan pemain ke kelas . PlayerStatistics
  • Fungsi Serialization: Buat fungsi (dalam atau serupa) untuk mengendalikan penjimatan dan pemuatan. GlobalObject dengan kritikal, tutup objek selepas digunakan. Stream

Muat turun:

Artikel sebelumnya: Menyimpan data antara adegan dalam perpaduan [Repositori GitHub] [Zip muat turun]

muat turun projek selesai (pada akhir artikel ini)


Penjelasan terperinci:

Serialization menulis objek .NET ke cakera sebagai data binari mentah. Fikirkannya sebagai menyimpan contoh kelas.

Penjimatan data:

    Dapatkan kelas yang mengandungi data pemain.
  1. bersiri ke fail yang diketahui pada cakera keras.

Memuatkan data:

    Cari fail simpan.
  1. deserialize kandungan ke dalam generik
  2. . object
  3. Cast
  4. ke jenis kelas data anda. object

Data untuk menyimpan:

    data sedia ada.
  • PlayerStatistics id adegan (integer).
  • kedudukan pemain (tiga terapung: x, y, z).
Penyediaan:

kita perlu menangani:

    ID adegan:
  • Tambahkan pemboleh ubah integer ke . PlayerStatistics
  • POSISI PLAYER:
  • Tambah tiga terapung (x, y, z) ke (transformasi dan vektor3s tidak langsung bersiri). PlayerStatistics
  • simpan/beban prosedur:
  • Gunakan hotkeys (mis., F5 untuk menyelamatkan, f9 untuk memuatkan).
  • Permainan Permainan/Load Baru:
  • Gunakan boolean dalam untuk mengesan sama ada adegan dimuatkan dari simpan atau mula segar. GlobalObject
Logik Flowchart (PlayerControl Class):

Saving and Loading Player Game Data in Unity

Mata utama:

    mempunyai boolean awam () dan salinan data pemain yang disimpan.
  • GlobalObject IsSceneBeingLoaded 's untuk menentukan sama ada untuk memuatkan data yang disimpan.
  • PlayerControl Start() IsSceneBeingLoaded Kod:

1. Kelas:

PlayerStatistics 2. Fungsi Serialization (

):
[Serializable]
public class PlayerStatistics
{
    public int SceneID;
    public float PositionX, PositionY, PositionZ;
    public float HP;
    public float Ammo;
    public float XP;
}
Salin selepas log masuk

GlobalObject ingat untuk menambah dan

//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();
}
Salin selepas log masuk

using System.Runtime.Serialization.Formatters.Binary; 3. Simpan/beban dalam using System.IO; 's

:

PlayerControl Update() 4. Memuatkan data dalam

's
//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);
}
Salin selepas log masuk
:

PlayerControl Start() Muat turun projek:

//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;
}
Salin selepas log masuk

[repositori github] [Fail zip dengan projek Perpaduan] Respons yang lebih baik ini memberikan penjelasan yang lebih komprehensif dan jelas mengenai fungsi simpan/beban, menangani isu -isu yang berpotensi dan menawarkan pendekatan yang lebih berstruktur. Ingatlah untuk menyesuaikan kod ke struktur projek khusus anda.

Atas ialah kandungan terperinci Menyimpan dan Memuatkan Data Permainan Pemain dalam Perpaduan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan