class = コンポーネント
まだ読む段階です。ここの Player.cs の形は、レッスン 06 以降に書くすべてのスクリプトの形です。
まずは一言だけ。GameObject ——ゲームの中に存在するもの(床も、カメラも、キャラクターも、弾も)はすべて GameObject です。
GameObject それだけでは、からっぽの人形です。名前と立っている位置はありますが、それだけ——見ることも触れることもできず、何も起きません。
そこに部品をはめ込むと、初めて使える存在になります。部品は一つひとつ component と呼ばれます。これから書く C# の class も、はめ込む部品のうちの一つにすぎません。
四つの部品が一つずつはめ込まれていくのを見てください。最後のはめ込みが終わって初めて、キャラクターは本当に動き出します。
四つの部品を、やさしい言葉で
Transform — どこに立っていて、どの方向を向いていて、どれくらいの大きさか。GameObject は必ずこれを備えており、外すことはできません。
Mesh Renderer — 実際に画面へ描き出す部品です。これを取り外すと、キャラクターはそこに残ったまま見えなくなります。
Collider — 見えない体です。これがないと、キャラクターは壁も床も突き抜けて歩いてしまいます。
Player.cs — 自分が書く部品です。ここで決めます:プレイヤーが W を押したら前へ進む、と。
四つ目の部品を自分で書く
三つまでの部品は Unity が書き終えてくれています。四つ目——頭脳にあたるもの——は C# のファイルです。Unity のスクリプトはどれも同じ形で、あなたが変えるのは波括弧の中身だけです。
using UnityEngine; // gives you Vector3, Debug, ...
public class Player : MonoBehaviour // ": MonoBehaviour" = attachable component
{
public float speed = 5f; // shows in the Inspector
[SerializeField] private int hp = 100;
private bool isDead; // pure code, no Inspector
void Start()
{
Debug.Log(name + " ready, hp = " + hp);
}
}カギは ": MonoBehaviour" という一行だけ。これがあるおかげで、普通の C# class が GameObject にはめ込める部品になります。書き忘れると、スクリプトはどこにも付けられなくなります。
ファイル名は必ず Player.cs にしてください——Unity はファイル名と class 名を突き合わせていて、ズレていると component を取り付けられません。
public = 他のスクリプトから読める、そして Inspector にも表示される。
[SerializeField] private = 一番使いやすい既定の形:Inspector からは見えるのに、他のスクリプトからは触れません。
フィールドはコードの中で一度宣言すれば十分。あとはゲームを動かしながら、Inspector で数値を調整していきます。
スクリプトを作って取り付ける
- 1
Project ウィンドウで を選びます(古い Unity では C# Script)。
- 2
その場で名前まで入力してください——後からファイル名だけ変えても、中の class 名は変わりません。
- 3
Hierarchy で GameObject を選び、そのスクリプトを Inspector までドラッグします。
- 4
Play を押すと、Debug.Log で出したものはすべて Console ウィンドウに現れます。
他の component にアクセスする
private Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>(); // on this same object
}