実際に作業して気づいたポイント
・Assetフォルダには種類ごとにスクリプトやシーンを分けたほうがよい。
→[Resources][Scenes][Scripts]のように分ける。それぞれ、「画像とサウンド」 「シーン」「スクリプト」を入れる。
・Unityなどでボタンなどの操作できる部品を作る機能を**UnityUI(通称uGUI)**という。これを利用することでゲーム画面にボタンやテキストボックス、チェックボックスなどを配置できる。シューティングゲームの武器選択や、RPGのアイテム倉庫画面を作るのに向いている。
・**Canvas(キャンバス)**とはボタンなどの部品を配置する土台となるパーツ。透明で表示されないが、ボタン類をキャンバスの子OBとして配置すれば、まとめて移動したりサイズ変更したりできて便利。
・CanvasなどのUnityUI関連のGOを追加するとEventSystemというGOが追加されるが残しておくこと。
・作成したCanvasをヒエラルキーでみると、ゲーム画面より遥かにでかくなっている。単位の基準があっていないので、直してやる。もともとの「ゲーム画面」はMainCameraGO、つまりカメラがうつす範囲。だからキャンバスの設定を変更してカメラの範囲内に収まるように調整してあげればゲーム画面と合うようになる。
Canvasをインスペクターでいじる。
[Canvas]コンポーネントの[Render Mode]を[Screen Space - Camera]に変更。
次にMain CameraOBを[Render Camera]にD&D。
[Canvas Scaler]コンポーネントの[UI Scale Mode]を[Scale with Screen Size]を選択し、
[Referrence Resolution]を画面のサイズに調整してあげる。Matchを1(Height)に変更(今回は高さを揃えて幅を変更するようにした)。
解説
Canvasコンポーネントはキャンバスの機能そのものを提供している。[Render Mode]を[Screen Space - Camera]にして参照するカメラを指定すると、カメラの撮影範囲に収まるようにサイズ調整される。CanvasScalerコンポーネントはキャンバス上に配置したUIパーツのサイズを調整する。[UI Scale Mode]を[Scale with Screen Size]にした場合、[Referrence Resolution]に指定した解像度を基準に調整してくれる。Matchはん実機の画面サイズと[Referrence Resolution]の設定値が一致しない時の調整方法の設定で、1(Height)に変更すると、高さを揃えて幅を変更するように設定できる。
背景を設置する
キャンバスの上にUIパーツを配置していく。ぬりつぶしや飾りとして画像を表示させる場合は、イメージを配置する。UIパーツは通常のTransformコンポーネント(以下CP)の代わりにRectTransformCPを持っており、Anchor(アンカー)の種類によって位置かサイズを調整できる。
・親OBと位置を合わせる→Anchorはストレッチ以外を選び、PosX,Y,Width,Heightで位置とサイズを指定
・親OBとサイズをあわせる→Anchorはストレッチを選択、Left,Right,Top,Bottomでパディング(余白)サイズを指定
タイトルを配置
UIからテキストを選択。Posで位置を調整し、テキストに表示したい文字を入力。テキストCPでフォントサイズとAlignmentを調整すれば完成!
ボタンを設置
UIからボタンを選択。先程と同様に位置を調整。ボタンの文字を設定するには、ボタンの子OBになっているテキストを編集。ボタンには、クリックされたときにスクリプト内のメソッドを呼び出す機能がある。また、ボタンにはButtonコンポーネントをもっており、「クリックされたときに何かを実行する」というボタンの基本機能を実現させるCPである。ボタンなどのUIパーツはイベントを持っており、そこのどのメソッドを呼び出すかを指定する。
ちなみにボタンの場合はOnClickイベントをもつ。
プログラムで次のシーンに切り替える
ボタンにSceneManagerクラスのLoadSceneメソッドを呼び出して、指定したシーンを読み込む。
using UnityEngine;
using UnityEngine.SceneManagement;
public class ExampleClass : MonoBehaviour
{
void Start()
{
// Only specifying the sceneName or sceneBuildIndex will load the Scene with the Single mode
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}
"OtherSceneName"のところに移りたいシーン名を書く。
public void PushStartButton () {
//TileManagerクラスに書かれた、PushStartButtonメソッド。ここで定義している。
SceneManager.LoadScene ("GameScene");
}
今日はゲームのタイトル画面作成と、他のシーンへの移行ができるようになった。