はじめに
※この記事の対象者はプログラミング経験はあるがUnityでやったことがないという人向けとなっています。
エディタ編に続いて、今回はUnityでのプログラミングの基礎について書いていこうと思います。
今回はコンソールウィンドウにスクリプトの実行結果を表示してイメージをつかんでもらおうと思います。
スクリプトの生成
スクリプトの生成には2つの方法がありますので見ていきましょう。
オブジェクトから直接作る
1つ目の方法は作ったオブジェクトから直接生成する方法です。
まずは空のオブジェクトを作っていきましょう。
ヒエラルキーウィンドウで右クリック>Create Empty

インスペクターで作った空のオブジェクトの情報を見ると下に「Add Component」とあるので押していただき、検索欄に「test」と書きます。
testと書いたら一番下の「New Script」をクリック。

そしたら下の「Creat and Add」をクリック

これでスクリプトファイルが生成されます。
スクリプトファイルは自動的にプロジェクトウィンドウに行きますのでプロジェクトウィンドウを確認し「test」をダブルクリックして開きましょう。

プロジェクトウィンドウから作る
2つ目の方法はプロジェクトフォルダーから作りアタッチする方法です。

生成したら名前を好きなものに変え、適用したいオブジェクトにドラッグアンドドロップしてアタッチします。
アタッチしていないと実行しても何も起こらないので注意してください。

スクリプトファイルの開き方はもう一つの方法で説明した時と同じで、ダブルクリックして開きます。
StartとUpdate
スクリプトファイルを開いたらこんな感じのスクリプトが出てきたではないでしょうか?
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
これはこれから書いてくスクリプトの基礎になるんで超重要です。
プログラムを書いていく前にまずここにある関数2種類StartとUpdateについて説明します。
Startというのはこのスクリプトが適用されてるオブジェクトがゲーム中に生成された時に一番最初に一回だけ呼ばれる処理です。
つまり空のオブジェクトが生成されたときに一番最初にさせたい処理ですね
// 一番最初に呼ばれる処理
void Start()
{
//{}の中にさせたい処理
}
次にUpdateです。
UpdateというのはStartとは違い、毎フレーム呼び出される処理です。
ゲームというのは1秒間に何フレームも更新されているのはご存じですよね?
その何フレームも更新される処理をUpdateに入れるわけです。(入力情報や描画だったり)
// マイフレーム更新させたい処理
void Update()
{
//{}の中にさせたい処理
}
コンソールウィンドウに表示させてみる
早速取り掛かっていきましょう。
Startの中にこれを書いてください。
// 一番最初に呼ばれる処理
void Start()
{
Debug.Log("Hello World");
}
これでエディタの方に戻り実行してみると…

このように一回しか呼ばれていません。
この処理をUpdateの中でもやると…

このように毎フレーム呼ばれるようになります。
アクセス修飾子
c#にはアクセス修飾子というものがありまして、これによってデータのやり取りに範囲を決めることができます。
主に使うのは2つ、privateとpublicです。
privateは自分のクラスでのみ参照可能で、publicは自分のクラスだけでなく、他のクラスからも参照可能となるアクセス修飾子です。
Unityでこいつらがどんな働きをしてくれるのかを見せていこうと思います。
public
まずはpublicですね。
スクリプトをこんな感じにして書いてください。
public class test : MonoBehaviour
{
public int age;
// 一番最初に呼ばれる処理
void Start()
{
Debug.Log("私の年齢は" + age);
}
}
これでエディタの方に戻り、このスクリプトを適用している空のオブジェクトのインスペクターを見てみると…

このようにスクリプトに項目が追加されています。
この項目を書き換えて実行してみると…

インスペクターで変えた値が適用されているのがわかりましたね。
これはデバッグとか値の調整でいちいちプログラムを開かなくても済むので便利ですね。
ただしこれだけではありません。
スクリプトをもう一つ生成し、空のオブジェクトにアタッチしてこのような内容を書いてください。
using UnityEngine;
public class disp : MonoBehaviour
{
public test test;
// 一番最初に呼ばれる処理
void Start()
{
Debug.Log("私の年齢は" + test.age);
}
}
最初に作ったtestはstartの処理を消し、このように書き換えてください。
public class test : MonoBehaviour
{
public int age;
}
からのオブジェクトのインスペクターへ行き、testスクリプトを作ったもう一つのスクリプトの項目に入れます。

これで実行すると…

先ほどと同じ結果が出ます。
しかし、表示するプログラムはtestではなく新しく作ったプログラムの方で実行されており、testの値にアクセスして年齢を表示しています。
このように他のプログラムからアクセスされることが可能となります!
private
privateはpublicとは逆で、自分のクラスで完結したい、他のプログラムにアクセスして欲しくない!というときに使います。
testをこのように書き換えてください。
using UnityEngine;
public class test : MonoBehaviour
{
private int age = 20;
// 一番最初に呼ばれる処理
void Start()
{
Debug.Log("私の年齢は" + age);
}
}
これで空のオブジェクトのインスペクターでスクリプトを確認してみますと

何も表示されなくなりました。
ついでに実行するとpublicと同じ結果となります。
おわりに
Unityでのプログラムの基礎としてはこんな感じです。
実際に何か作ってコツをつかんでいくのが大事だと思いますので是非、他の記事も参考にしてもらえればなと思います。