はじめに
少し時間がたってしまいましたが、2回目です。
前回(初心者のUnityゲーム作り)の続きです。
タイトル画面、スコア、ライフ、ゲームオーバーを作成しました。
前回同様、調べたポイントを残しておきます。
作ったもの
タイトル画面~

めちゃくちゃシンプルだけど、タイトルあるだけでゲーム感マシマシ。
シーンの遷移
using UnityEngine.SceneManagement; // シーン遷移用
public class GameOverBtn : MonoBehaviour
{
public void OnClick()
{
SceneManager.LoadScene("Title"); // シーン遷移
}
}
LoadScene("シーン名")で遷移できます。
ちなみに、LoadSceneAsyncは非同期らしいです。どう使うかはよくわかりません。
ハイスコアの保存
ゲームを終了しても値を保持する方法を調べました。
PlayerPrefs.SetInt("hiscore", score);
score = PlayerPrefs.GetInt("hiscore");
SetInt("名前", "値")で保存、GetInt("名前")で取得できます。
他にも以下のような種類があります。
| メソッド名 | 保持する型 |
|---|---|
| GetInt | Int |
| GetString | String |
| GetFloat | Float |
また、HasKey("名前")でその名前で値を保持しているかbool値で返してくれます。 |
オブジェクトの取得
GameObject hoge = GameObject.Find("GameManager");
GameObject.Find("名前")でシーン上のオブジェクトを取得できます。
他にもFindGameObjectWithTag("タグ名")といったものもあります。
おいおいまとめたいです。
他のスクリプトを参照
GameObject.Find("GameManager").GetComponent<GameManager>().damageMethod();
先述のメソッドで取得したオブジェクトからGetComponent<"スクリプト名">でスクリプトを取得して、その中のpublicのメソッド・変数を参照できます。
あらかじめ、取得するオブジェクトにスクリプトをアタッチしておく必要があります。
オブジェクトの表示・非表示
gameoverPnl.SetActive(true);
SetActiveを呼ぶだけです。trueなら表示。falseなら非表示です。
注意としては、これで非表示にしたものは先述のFind等で参照できなくなります。あらかじめ変数に確保などが必要です。
ボタンクリック処理
まず、以下のスクリプトを用意します。
public class StartBtn : MonoBehaviour
{
public void OnClick()
{
SceneManager.LoadScene("Main");
}
}
このスクリプトを、UIで作成したボタンにアタッチし、ButtonコンポーネントのOnClick欄の+ボタンを押します。

左下のNoneになっているところを押します。

呼び出したい処理がアタッチされているオブジェクトを選択します。(ここでは自分自身)

No Functionになっている部分を押します。

選択したオブジェクト名の中の呼び出したいメソッドを選択します。

これで呼び出せるはずです。
UIの配置
完成と思いビルドして実行してみたところ、下のようになってしまいました。

……UIのテキストの表示がおかしい!
色々調べまして、ひとまず以下の方法でうまくいきました。
CanvasのCanvas ScalerコンポーネントのUI Scale ModeをScale With Screen Sizeに変更する。(変更時に表示が乱れたのでそこは修正しました。)

さいごに
今回作ったゲームは一旦ここまでにします。
次は3Dも触ってみたいです。アセットストアとかも。
それではまた次回に。

