Unity

Unityでセーブしたりロードしたりする

今作ってるシューティングゲームの自機HPを保存したり
読み込んだりしてみたいと思います。

セーブするには
PlayerPrefs.SetInt("SVhp", myhp);

こんな風に書くようです。
"...."この部分に保存する名前を書きます。
ロードするときはこの名前で呼び出します。
,の後ろにセーブする変数を書きます。

ロードするときは
int myhp = PlayerPrefs.GetInt("SVhp",3);

こんな風に書くようです。
"...."の部分にセーブしたときにつけた名前を書きます。
,の後ろはもしセーブしたデータが無いならこの数値が代入されます。

1.
監督スクリプトのHPkantoku に記述していきます。
start関数の下に書きます。
セーブする関数名をSaver
ロードする関数名をLoader にしました。

//セーブサブ
public void Saver() {

PlayerPrefs.SetInt("SVhp", myhp);

}

//ロードサブ
public void Loader()
{

int myhp = PlayerPrefs.GetInt("SVhp",3);

//現在のHPを表示して返す。myhpは数値型なのでToStringで文字列に変換。
this.HPdamege.GetComponent().text = myhp.ToString("D5");

}

2.
セーブとロードの2つのボタンを作る。
ヒエラルキービューのcreate → UI → Button

3.
ボタンのtextにそれぞれセーブとロードと入力。
ボタンの名前をSVbutton,LDbuttonにしました。

4.
まずセーブボタンから。
インスペクタビューのOnclickの + をクリック。
None って欄にヒエラルキービューのHPkantokuをD&Dして
さっき書いた関数にアクセスできるようにする。

5.
No Function → HPkantoku → Saver()
これでセーブボタンとSaver関数が繋がりました。

6.
同じようにロードボタンもLoader関数と繋げてやります。

7.
さて、実行してみよー

最初のHPは3でした。
1発被弾してHPを2にしてセーブボタンを押します。


さらに被弾してHPがー6になりました。
ここでロードボタンをクリック。


おおー
HPが2に戻りました!
ちゃんとセーブできているようですな!

一旦デバッグを終了してもう一回実行しても
ロードボタンを押すとちゃんとHPが2になりました。

うんうん。
セーブとロードは割とすんなりできた気がする!
やった! ^0^

///////////////////////////////////////////////////////////
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UI使うのに必要

public class HPkantoku : MonoBehaviour {

GameObject HPdamege; //現在のHPを表示するテキスト用のgameobject型変数、HPdamegeを宣言
int myhp = 3; //自分のHPの初期値を宣言

// Use this for initialization
void Start () {

this.HPdamege = GameObject.Find ("HPtext"); //UIのHPtextを見つけてHPdamegeに代入、実体化

//float myhp = 3.0f; ここで宣言してもダメらしい
}

//ダメージ表示サブ
public void DMGsub() { //他のオブジェクトからアクセスできるようにpublicで記述

this.myhp -= 1; //ダメージ受けたらHP減らす

//現在のHPを表示して返す。myhpは数値型なのでToStringで文字列に変換。
this.HPdamege.GetComponent().text = myhp.ToString("D5");

}

//セーブサブ
public void Saver() {

PlayerPrefs.SetInt("SVhp", myhp);

}

//ロードサブ
public void Loader()
{

int myhp = PlayerPrefs.GetInt("SVhp",3);

//現在のHPを表示して返す。myhpは数値型なのでToStringで文字列に変換。
this.HPdamege.GetComponent().text = myhp.ToString("D5");
}

// Update is called once per frame
//void Update () {

//}
}

////////////////////////////////////////
ー広告ー



-Unity

© 2020 Bou.O The World Powered by AFFINGER5