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

unityパズルゲームの作り方

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

前回の記事↓

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

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

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

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

次回の記事↓

Tag(タグ)を使った衝突判定とボール落下位置の調整
パズルゲームの作り方講座の第3回ではunityスクリプトの書き方・使い方の導入を行いました。 前回の記事↓ 第4回では、大きく分けて次の2つの処理を作成していきます。 ボールを落とす位置の調整 ボールの衝...
【必見】無料資料請求でスクエアエニックスのゲーム開発の企画動画が見れる学校アリ
令和時代のゲームクリエイターになるための必須スキルがUnity。未経験からでもUnityを学んでオリジナルゲーム制作&ゲーム会社就職が可能なゲーム専門学校・プログラミングスクールの情報をオンライン&対面形式に分けてまとめました。 無料資料請求でスクエアエニックスのゲーム開発企画の動画もらえるので見てみるといいですよ。
unityパズルゲームの作り方
unity入門の森 ゲームの作り方

コメント

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