RPGゲームをプログラミング Part3

※注意

  • 筆者はプログラミング初心者であり、ソースコードもとても汚いです。
  • 筆者の心はとても弱いです。唐突にシリーズが終わるかもしれません。
  • この記事はゲームの作り方を示したものではなく、ゲーム作りにもがき苦しむ筆者の日記のようなものです。

今回の目標

ワールドマップからローカルマップへの切り替え



切り替えるSceneを用意

前回作った城のあるシーンとは別に城内のシーンを作ろうと思う。

作り方自体は簡単! Creat>Scene で作れる

そのシーンをFile>Building Setting 前回作ったシーンと一緒に投下

あとは、前回みたくお絵かき~。

なんか素材の切り方ミスったかな?床が壁を貫通しちゃった。

まあ、いいか。壁に当たり判定付けておいて一旦おしまい。

Triggerの設置

MapPlayerがTriggerに触れたときにSceneの切り替えができるようにしたあいなぁ。

ということで、CreateEmptyで適当なオブジェクトを作成。赤丸のところに配置してBox Collider2D で当たり判定を付け、Is Trigger にチェックをいれる。

城の当たり判定にもIs Triggerをいれておこう。

スクリプトを作ろう

問題のスクリプトだけどTriggerにplayer触れているときに何らかのボタンを押したらSceneを移動するってやつを作りたい。

Triggerに触れているときに実行するコードは OnTriggerStay2D ってやつの中に書くらしい。OnTrigger にはいくつか種類があるらしいけど今回は OnTriggerStay2D がベストかな。
(その辺の説明はここのサイト様が丁寧かも。https://www.sejuku.net/blog/83742)

それで、今回の肝が SceneManager.LoadScene(SceneName) って関数。, SceneName ってとこに切り替えたいシーンの名前を入れるらしい。
このスクリプトを使いまわしたいから SceneName って関数を定義していつでも変更できるようにしとくといいかも。 あとは、Find って関数でMapPlayerを見つけさせて DontDestroyOnLoad() って関数で次のシーンに MapPlayer を引き継げば完璧かな?
スクリプトはこんな感じ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;//追加

public class ChangeScenes : MonoBehaviour
{
    GameObject player;
    public string SceneName;//あとから切り替えるシーンを指定できるように
    void Start()
    {
        player = GameObject.Find("MapPlayer");//シーンに存在するMapPlayerというオブジェクトを見つける
    }

    void Update()
    {
       
    }
    private void OnTriggerStay2D(Collider2D collision)//当たり判定があるとき実行
    {
    
        if (Input.anyKeyDown)//何らかのキーが押されたとき
        {
            SceneManager.LoadScene(SceneName);//シーン切り替え
            DontDestroyOnLoad(player);//MapPlayerを引き継がせる
        }
    }

これをさっき作ったIsTriggerにチェックの入ったオブジェクトに付与。
SceneNameに切り替えたいSceneの名前を入れれば完成!(ちなみに私はMap⇔Castle って切り替えをしたい)

新しい課題

よし、早速動かしてみよう!!

ん?MapPlayerが増えた?

元々マップにMapPlayerが存在するから引き継いだオブジェクトと2つできるのかな?

以下、問題点

  1. MapPlayerが2つできる
  2. 移動後のMapPlayerの座標がそのまま
  3. 城内の入り口の当たり判定が小さい

とりあえず、3だけ解決しておこう

当たり判定はEdge Radius ってのをいじると幅を持たせることができるらしい。

これで、当たり判定が広がったはず。

あとがき

今回、発覚した課題の1,2に対して有効な手段を持ち合わせていないので、ここまでで終わりたいと思います。多分、プレハブ使った解決をすると思うけど、どうなるか分からん。あと、見返すとなんか英語多いなぁ。見づらかったら教えてね。以上!また今度~。

参考

https://www.sejuku.net/blog/83742

https://gametukurikata.com/program/data

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク