unityスクリプトの書き方と使い方入門

unityパズルゲームの作り方

C#のスクリプトの書き方/使い方

Unity上のC#を書く練習に、まずはボールを一定間隔で生成するスクリプトを作っていきましょう。

スクリプトの作成

初めに、ProjectのAssetsの中にScriptsフォルダを作成してください。その後、Scriptsフォルダ下にC# Scriptを「BallGenerator」という名前で作成してください。この時、描いた名前が自動でクラス名になります。

スクリプトの書き方

スクリプトを作成したら、スクリプトをダブルクリックしてください。すると、既定のテキストエディタが起動します。本記事の環境ではVisual Studio Codeが起動しています。

起動すると、下のようにBallGeneratorファイルが開かれた状態になります。この時、5行目を見てみると、クラス名がBallGeneratorになっていることが確認できます。

また、自動生成されたクラスには、start関数とupdate関数があります。start関数は、ゲームオブジェクトが生成されたとき一度だけ実行される関数です。変数の値の初期化などに使用されます。update関数はフレームごとに一度実行される関数です。入力取得やリアルタイムに演算させる際などに使用されます。

それでは、60フレームごとに1つのボールを生成するスクリプトを作成します。このスクリプトを作成するためには、下記のようなコードを書いていきます。

7行目からコードを書いています。順番に解説していきます。

まず、7~8行はプレハブのゲームオブジェクトを取得するために書いています。7行目の[SerializeField]は、Unity特有のコードであり、インスペクタから設定できる変数であることを意味します。これは属性(attribute)と呼ばれ、通常は次の行の変数に適用されます。つまり、8行目のGameObject型の変数ballObjはインスペクタから設定できる変数であることが分かります。

次に、10行目ではフレームごとにカウントアップする変数cntを、11行目では定数MAXCNTを60と定義しています。これらは、22~23行にて使用します。

それでは、関数内のコードについて解説していきます。今回は初回起動時に必要な処理がないため、start関数には何も記入しません。update関数では、60フレームごとに1つのボールを生成する処理を書いていきます。

60フレームを検知する処理の2つの書き方

まずは60フレームごとを検知する処理を考えていきます。書き方は2種類あります。一つ目は次のようなコードです。

これは、cntがMAXCNT(60)以上であるかどうかをif文にて分岐させる書き方です。このほかにも、よく書かれるコードがあります。それは次のようになります。

このコードは、cnt%=MAXCNTの部分を追加してif文を少し変えたコードとなります。この書き方では、cnt%=MAXCNTは「cntにMAXCNTで割った余りをcntに代入する」処理となります。

例えば、cntが0~59の時はMAXCNTの値である60で割った余りはそのまま0~59です。しかし、cntが60になったとき、60で割った余りは0となります。つまり、cntは0から昇順に59まで増えていき、60になると0となります。そのため、この書き方でも、60フレームごとを検知することができます。

コードの説明に戻ります。26行は、ボールと同じゲームオブジェクトを複製するコードとなります。このInstantiate関数に複製したいゲームオブジェクトを書くことでそのゲームオブジェクトを複製できます。ここでは、ballObjを書いているためボールを複製していることが分かります。

最後の27行は、この後作成するゲームオブジェクトBallGeneratorの子オブジェクトに設定するコードとなります。この処理は後で効いていくコードとなるため、ここでは説明を省略します。

スクリプト全体は次のようなコードになります。

作成したスクリプトの適用方法

それでは、Unityに戻りましょう。ヒエラルキーに空のゲームオブジェクトを作成し、名前をBallGeneratorにしてください。ゲームオブジェクトBallGeneratorのインスペクタに先ほど作成したスクリプトBallGeneratorを追加してください。さらに、7行に書いた[SerializeField]によりインスペクタからballObjが設定できるようになっていることが確認できます(インスペクタ上では”Ball Obj”と表記が変わっていますが、これはUnityの仕様上、自動的に変わるものなので気にしないでください)。プレハブに登録したBallをballObjにドラッグ&ドロップして設定しましょう。

それでは、この状態で実行してみましょう。下のようになります。

これで、今回のC#のスクリプトについての説明は以上です。

おさらいと次回予告

今回は、C#のスクリプトを作成しました。

次回からはさらに細かい処理をスクリプトに書いていきます。

コメント

タイトルとURLをコピーしました