「シーンの切り替えがうまくいかない・・・」
「シーンの切り替えはできるようになったけど、ぱぱっと切り替わっちゃって味気ない・・・」
なんてことはありませんか?
少し前のわたしのことです・・・。
ゲームの形としては完成したけど・・・
クリア画面やゲームオーバー画面も作りたい。
タイトル画面に戻るだけでは面白みがないよね。
ということで今回はシーンを切り替える方法について深掘りします。
たくちん
- 未経験でも他業種でも「できる」ゲームの作り方を発信中
- 2歳の娘に挑戦する父ちゃんの背中をみて育ってほしい
- 娘と一緒に遊べるゲームを!と制作開始→苦労はあったが完成
新しいゲームも作ったよ!(えっへん)
iPhoneアプリとしてリリースもできました!
ひらがなーず~ひらがなあどべんちゃあ~
無料 posted withアプリーチ
せっかく始めたゲーム開発・・・。
挫折してしまうのはもったいない!
朝起きたら、ゲーム開発に関する知識詰め込まれてないかな・・・なんて。
アンケートで分かった「稼ぐこと」ができた学習方法をまとめました。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
シーンの切り替え方法
- シーンを作成
- シーンを遷移するスクリプト
- オリジナルゲームに当てはめる
シーンの作成
プロジェクトにNew Sceneができれば成功です。
続いてシーンを登録していきましょう。
同じ背景を使いたい場合はコピーするのが便利です。
背景の挿入ってなんだっけ?という方はこちらから。
同じ背景をコピーするための方法
どの部分をコピーすれば良いの?
画像とサイズに関わる部分をコピーすればOK。
つまり画像を選択するSprite Rendererとサイズを調整できるTransformですね。
コピーの仕方は画像にて解説します。
コンポーネントをコピーして貼り付けることで、簡単に同じ背景にすることができます。
赤枠の部分をクリックすると詳細を確認できます。
シーンを遷移(移動)するスプリクト
特定のタグが付いたオブジェクトに触れたときシーンが変更されるスクリプト。
if (collision.CompareTag("boom"))
{
GameObject targetObject = GameObject.Find("GameManeger");
targetObject.GetComponent<Scene>().ChangeScene();
Destroy(collision.gameObject);
}
if (collision.CompareTag(“boom”)) もし触れたもののタグが(boom)だったら・・・
GameObject targetObject = GameObject.Find(“GameManeger”); ゲームオブジェクトからGameManegerを探してtargetObjectへ代入。
targetObject.GetComponent<Scene>().ChangeScene();targetObjectのScene(スクリプト)からChangeScene()関数を読み込む。
Destroy(collision.gameObject);触れたものは削除してね。
一文ずつにすると理解が深まりますね。
もうちょっとです!
using UnityEngine.SceneManagement;
public class Scene : MonoBehaviour
{
public void ChangeScene()
{
StartCoroutine(DelayedSceneChange());
}
using UnityEngine.SceneManagement; シーンを変更する場合はusing〜が必要。
public void ChangeScene() さきほどのChangeScene()関数の中身ですね。
StartCoroutine(DelayedSceneChange()); コルーチンを使ってシーンを切り替わるまでの秒数をコントロールする関数を呼んでいます。
public float waitTime = 2f;
IEnumerator DelayedSceneChange()
{
yield return new WaitForSeconds(waitTime);
SceneManager.LoadScene("GAMEOVERscene");
}
yield return new WaitForSeconds(waitTime); コルーチンを使って2f(2秒)遅延をもたせます。
SceneManager.LoadScene(“GAMEOVERscene”);GAMEOVERsceneを読み込んでシーンが切り替わります。
お疲れ様でした!
サクッと切り替わってしまって味気ない・・・
コルーチン詳細についての記事はこちらです。
オリジナルゲームに当てはめると・・・
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("cat food gold"))
{
Destroy(collision.gameObject);
can += 1;
Scoretext.text = "Score:" + can + "/" + maxcan;
}
if (can >= 10)
{
SceneManager.LoadScene("clearscene");
}
スコアの管理をテキストで表示して10ポイント溜まったらシーンが変わるスプリクトです。
スコアを使ってシーン遷移(移動)
10個目を獲得した瞬間、シーンが切り替わりってますね。
またまた猫ちゃんが・・・!(我が家の猫様の写真が出るようにしました。)
シーンが切り替えがうまくいかないときのチェック
- シーンの登録
- スクリプトのシーン名確認
かなり苦戦しました・・・
解説します。
シーンの登録
新しいシーンを作成しても登録しなければ呼ばれません。
ファイル→ビルド設定をクリックして作ったシーンが登録されているかチェック。
登録したいシーンを開いて「シーン追加」をクリックして、追加されていることを確認。
登録していないとこんなエラーがでます。
登録がされている場合は
シーン名が間違っている可能性が・・・。
スクリプトのシーン名確認
シーン名は任意で決められるから、スクリプトに書くとき間違えやすい。
まさかぁ・・・
と思いましたがわたし間違えてました。。
””の中がシーン名になるよう確認してみてくださいね〜。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
まとめ シーン切り替えのチェックポイント
シーンの切り替え方法をオリジナルゲームを使って解説しました。
これからやってみる方はスクリプトの1文ずつを読み解きながら進めると理解が深まるかと。
もし、うまくいかない場合は・・・
- シーンの登録
- スクリプトのシーン名確認
まさかぁ・・・と思ってもこの2つはやりがちなので確認してみてくださいね。
ちゃんと動いてくれると「できる」実感があって嬉しいものです。
シーンの切り替えがうまくいきますように。
個人ゲーム開発頑張っていきましょー!
ゲームの作り方総集編!
11ステップであなたもゲームが作れる。喜んでもらえる。
未経験からでも、分かる!が積み上がりゲームを完成できる。
詳細はこちらから。
コメント