おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

【Unity】前シーンのプレイヤーの位置を保存しておく方法

f:id:bookreadkun:20190922074800p:plain

おはようございます。おーみんです。

 

 

 

プレイヤーの位置を保存する

FFやドラクエなどのRPGではよくある、というか必ずある「フィールド→戦闘→フィールド」というシーン遷移ですが、戦闘シーンからフィールドに戻る際にそのままシーン遷移のプログラムを書いてしまうとプレイヤーの位置が初期位置に戻っちゃうんですよね~。

 

一応2通りのやり方がありまして、1つは以前ブログでも書いたDontDestroyOnLoadを使って前のシーン情報を丸ごと保存する方法です。

【Unity】シーン遷移の際に、シーンの状態を保持しておく超簡単な方法。 - おーみんだよ。

 

しかしながらこれでは色々と問題があるんですよね。。。

シーンを丸ごと保存しておくわけなので、当然処理は重くなるし上記のツイートみたいにトランジション処理で余計なエラーが発生したり。。。

 

ということで、今回は2つ目のやり方であるstatic変数を用いてプレイヤーの位置を保存する方法を書いていこうと思います。

 

 サンプルコード

static変数を用いて作ったサンプルコードは以下になります。

f:id:bookreadkun:20190922080023p:plain

 

13行目はゲームの一番最初のプレイヤーの初期位置になります。

 

34行目ではプレイヤーが敵とエンカウントした際に現在位置を保存しています。

※27行目~41行目のEncount関数に関しては以下の記事で解説していますので是非参考にしていただけると幸いです。

【Unity】RPGでの敵とのランダムエンカウントプログラムを作ってみた! - おーみんブログ

 

するとプレイヤーの位置が最初の13行目で定義した値から敵とエンカウントした場所に置き換わるんですね~(static変数なので)。

 

戦闘が終わって、再度フィールドに戻ったときにStart関数が読み込まれますが、その時に18行目の"Player.transform.positon = PlayerLocation;"によって以前保存された場所にプレイヤーが置かれるという感じです。

 

最後に

以上で前シーンのプレイヤーの位置を保存しておく方法でした。

方法は2通りありますが、個人的には今回書いたstatic変数を用いる方をおすすめします。

 

他にもやり方がありましたら是非教えてください。

では!

 

RPGに関する記事は他にも色々あげていますのでぜひ興味のある方は読んでいただけると嬉しいです!

【Unity】雷(サンダー)のエフェクトの作り方 - おーみんだよ。 

【Unity】シェーダグラフで雨の水滴を作る! - おーみんだよ。