いやー
諸事情により久々の投稿になってしまいました。
さて今回は、チェックポイントの作り方を紹介していければなぁと思います。
2Dで作っていきますが、3Dでも使える手法ですのでぜひ参考にしてみてください。
準備
動くプレイヤーを用意します。
プレイヤーが死んだり、変なところに落ちたりしたときに復活して欲しいスポーン地点をどこかに保持して欲しいので空のオブジェクトを作成し「GameManager」と名付けます。
そしてチェックポイントとなるオブジェクトを2つほど作っておきます。
チェックポイントにはコライダーをつけて「isTrigger」にチェックを入れておきます。
チェックポイントは適当にこんな感じに配置しておきます
そして「GameManager」に「GM」というタグをつけておきます。
準備は以上です。
スクリプトの方へ行きましょう。
スクリプト
GameManagerのスクリプト
めちゃくちゃ簡単です。
public class GameManagerScript : MonoBehaviour
{
public Vector2 CheckPointPos;
}
はい、これだけです。
チェックポイントに触れたらそのチェックポイントのポジションをこの変数に格納します。
この変数に格納されたポジションがプレイヤーの復活位置になります。
このスクリプトを先ほど作った「GameManager」にアタッチしましょう。
チェックポイントのスクリプト
private GameManagerScript GM;
void Start()
{
GM = GameObject.FindGameObjectWithTag("GM").GetComponent<GameManagerScript>();
}
private void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag("Player"))
{
GM.CheckPointPos = transform.position;
}
}
先ほどの説明で言ったように、プレイヤーがこのチェックポイントに触れたらチェックポイントのポジションを「GameManager」に格納してます。
このスクリプトを先ほど作ったチェックポイントにアタッチしましょう。
プレイヤーを復活させる
あとはプレイヤーをスポーンさせるスクリプトだけです。
今回はマグマに落ちたら復活するような感じにします。
GameManagerScript GM;
void Start()
{
GM = GameObject.FindGameObjectWithTag("GM").GetComponent<GameManagerScript>();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
collision.transform.position = GM.CheckPointPos;
}
}
プレイヤーがマグマに触れたら「GameManager」に格納されたポジションをもとにチェックポイント地点に復活します。
このスクリプトをマグマにアタッチしておきます。
実行結果
それでは実行してみましょう。
チェックポイントの出来上がりです!
まとめ
いかがだったでしょうか?
チェックポイントはプレイヤーへの大事な救済措置ですのでぜひつくて行ってください!