プログラムはコンピュータを動かす命令のことです。プログラムを行うことはプログラミングといいます。多くの場合、プログラミング言語と呼ばれるコンピュータ用の言葉を使用してコンピュータにやってほしいことを指示します。
この記事では、プログラミング言語の1つであるC#を用いてプログラムをしていきます。プログラムを使えば様々な機能を実現できますが、いきなり作成するのは不可能です。最初のステップとして何もしないプログラムを作ります。Unityでのプログラムの使用方法は、主にコンポーネントの作成です。そこで、何もしないコンポーネントを作成します。
Unityプログラミング講座一覧はこちら
コンポーネントを1行で書く
ところで、前回の記事でも何もしないコンポーネントを作成しています。UnityでC# Script
を作成すると自動的に何もしないコンポーネントが生成されます。例えば、以下のようなコードです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
何もしないコンポーネントを作るというだけであれば、これでも問題ないのですが、プログラムを理解するためにはもっと内容を減らしたほうがわかりやすいです。そこで、説明のために変更し、1行で書いてみました。
class NewBehaviourScript : UnityEngine.MonoBehaviour {}
C#プログラムはクラスが集まってできている
製品を作る際には様々な部品を組み合わせて作るように、C#のプログラムも部品が集まって作られます。C#プログラムは主としてクラスと呼ばれる部品が集まってできています。
クラスは以下のように書くことで作成できます。(スペースはすべて半角です。)
class クラス名 {メンバ}
classは、クラスを作成するためのキーワードです。
クラス名は、そのままクラスの名前です。名前を付ける際には命名規則というのがあり、それを守れば好きな名前を付けることができます。
メンバは、クラスの中身です。クラスもまた複数の部品の集まりから構成されます。クラスを構成する要素を総称してメンバといいます。
命名規則を守れば好きに名前は付けられますが、実用上以下の条件を満たすようにしましょう。
- 半角英数字と_(アンダーバー)のみ使用する。
- 1文字目に数字を使うことはできない。
- すでに使用されている名前は使用できない。
- 1文字目と単語の切れ目を大文字にする。
3つ目の項目は、例えばclass
を含むキーワードなどは使えず、2つ以上のクラスを作る場合には異なる名前にする必要があります。
4つ目の項目は慣習的なものです。例えば、上記のクラス名はNewBehaviourScript
となっていますが、これはnewとbehaviourとscriptの3つの英単語から成る名前です。名前を区切る際にスペースを使うことはできないので、大文字にしています。
また、C#では大文字と小文字は区別されます。つまりNewBehaviourScriptとNewbehaviourscriptと書くのでは別のクラスになります。
さて、上の説明に従ってメンバのいないクラスNewBehaviourScript
を作るとこうなるわけです。
class NewBehaviourScript {}
コンポーネントの場合はMonoBehaviorを継承する
メンバのいないクラスを作りましたが、最初に示したものとは異なりますね。
何もしないコンポーネント
class NewBehaviourScript : UnityEngine.MonoBehaviour {}
何もしないクラス
class NewBehaviourScript {}
これはクラスとコンポーネントの違いにあります。コンポーネントはクラスの1つに過ぎず、単にクラスを作るだけではコンポーネントにはなりません。実際、「何もしないクラス」はコンポーネントではないため、ゲームオブジェクトにアタッチできません。
コンポーネントを作成する際には「何もしないコンポーネント」のようにクラスMonoBehaviour
を継承する必要があります。
継承とは継承元クラスの特性を引き継いで新しいクラスを作る機能です。詳しい話をすると難しくなり初心者の内容を超えてしまうため、ここではMonoBehaviour
を継承するとその特性を引き継いでコンポーネントになると考えてください。
(より正確には、MonoBehaviour
もComponent
クラスを継承しており、コンポーネントの特性を引き継いでいます。そのため、MonoBehaviour
を継承したクラスもコンポーネントの特性を持ちます。)
クラスを継承する場合には以下のように書きます。
class クラス名 : 継承元クラス名 {メンバ}
したがって、MonoBehaviour
を継承したNewBehaviourScript
はこうなります。
class NewBehaviourScript : MonoBehaviour {}
これでも上述の「何もしないコンポーネント」とは一致しません。その上、これではエラーが出ます。MonoBehaviour
を使用するためには名前空間UnityEngine
をつける必要があるからです。
名前空間とはクラスなどの名前をグループ化するための機能です。通常、同じ名前のクラスは作成できませんが、これでは問題が起きることがあります。例えば、AさんとBさんが協力してプログラムを書いたときに、2人が同じ名前のクラスSample
を作ってしまったらエラーが起きます。これは名前空間により対処できます。AさんとBさんの書いたクラスを名前空間A
、B
内に作れば、Sample
クラスはA.Sample
、B.Sample
と書いて区別できます。
Unityは機能ごとに複数の名前空間を使用しています。MonoBehaviour
を筆頭とするUnityの機能を使用する場合には名前空間UnityEngine
が必要です。
というわけで、名前空間UnityEngine
に属しているクラスMonoBehaviour
を継承すれば、何もしないコンポーネントの完成です。コードを再度記載します。
class NewBehaviourScript : UnityEngine.MonoBehaviour {}
ファイル名とコンポーネント名は同じにする
コンポーネントの名前を変更する際には、1つ注意点があります。Unityではプログラムファイル名とコンポーネント名を同じにしなければならないという決まりがあります。一致していない場合、ゲームオブジェクトにアタッチすることができませんので注意しましょう。
まとめ
この記事では、プログラムの説明をして、1行でコンポーネントを作成しました。これで、好きな名前のコンポーネントを作成できるようになりました。しかし、現段階では何も処理を行わないコンポーネントしかできていません。次回から処理を書いていきましょう。
Unityプログラミング講座一覧はこちら