unityスクリプトの書き方と使い方入門 | Unity入門の森 ゲームの作り方

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

Unityパズルゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

パズルゲームの作り方講座の前回の記事では、unityを用いた衝突判定、重力処理を扱いました。

前回の記事↓

衝突判定・重力処理を使ってボールを作る
前回、ゲームの素材であるフィールドとボールを作成していきました。 前回の記事↓ 衝突判定/重力処理の作成 今回は、Unityの機能である衝突判定の解説および衝突判定を用いてボールに重力処理を加える方法について説明していきます。 【解説】衝突...

今回は第三回です。unityを使ったC#スクリプトの書き方・使い方を習得していきましょう。


【Line登録者限定のプレゼントもあるよ!】

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はインスペクタから設定できる変数であることが分かります。

関連記事:UnityC#のLinq・属性・拡張メソッド・クラスの部分定義の使い方

次に、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#のスクリプトを作成しました。

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

次回の記事↓

Unity Tag(タグ)を使った衝突判定とボール落下位置の調整
パズルゲームの作り方講座の第3回ではunityスクリプトの書き方・使い方の導入を行いました。 前回の記事↓ 第4回では、大きく分けて次の2つの処理を作成していきます。 ボールを落とす位置の調整 ボールの衝突判定の詳細設定 Unityではこう...

もっとUnity C#スクリプトを本格的に学びたい方は「UnityC#プログラミング入門講座 初心者でも挫折しないUnityC#」も見てみてね。

Unity C#プログラミング入門講座 初心者でも挫折しない
Unity C#スクリプトの初心者向けプログラミング入門講座です。 初心者でも挫折せずにUnityC#スクリプトの書き方が身に付きます。 Unityを用いたゲームプログラミングに必須の知識を一歩一歩身に付けていきましょう。

 

パズルゲーム講座が動画になりました。

動画も合わせてチェック!



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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