三星です。
前回の続きです。
プレイヤーを動かして、アイテムをゲットして、ゲームをクリアする!
この一連を学べます。
さらにさらに自分自身でコードを書いてスクリプトを追加する作業も体験できますので、敷居の高そうなコーディングも楽々です。
有料の本ももちろん良いですが、こちらのチュートリアルでUnityを体験してはどうでしょうか。なんと言っても無料ですから。
2 プロジェクトの作成
3 ステージを作成
4 プレイヤーの移動
4.1 コンポーネントとは
4.2 自作スクリプトをくっつける
4.3 必要なAPIを探す
4.4 数値の調整
ここまでの内容は前回を参照してください。
カメラを動かす
多くのゲームではプレイヤーの動きに合わせてカメラが動きますね?
それの実現方法がここでわかります。
Unityではオブジェクトに関連付けてそのオブジェクトの子オブジェクトを生成できます。
子オブジェクトは親オブジェクトの相対座標となります。
したがって親オブジェクト(プレイヤー)が動くと子オブジェクト(カメラ)が動きます。
しかし今回の回転するボールの子にした場合このようにカメラも回転してしまいます。
解決するにはメインカメラにプレイヤーを追従するようなコンポーネント(スクリプト)を付与することです。
GetComponent は、他のコンポーネントにアクセスするための主力となる方法です。
Transform はオブジェクトの位置、回転、スケールを格納し、操作するために使用されます。 すべての Transform は親を持ち、階層的に位置、回転、スケールを適用することができます。コンポーネントです。
GetComponent《Transform》().positionでこれはTransformコンポーネントの中のPosition変数を指定しています。
target.positionで指定したオブジェクトのTransformのposition変数のことです。
右の変数の値を左の変数に代入しています。
これでカメラがプレイヤーを追従するようになりました。
次にカメラの相対位置を指定します。
最初に相対距離を計算し、Positionを代入するときに相対距離を足した値を代入するようにします。
Start関数はコンポーネントの起動時に一度だけ起動する関数です。
これで完成です。
アイテム回収の追加
「ステージ上に大量に配置したアイテムにプレイヤーが接触したらアイテムが消える」といった機能を追加します。
“Player”が接触したら反応する
接触時アイテムが消える
アイテムを大量に複製するためにプレハブを利用します。
アイテムとの接触判定にはOnTriggerEnter関数が使える。
ただこれだけだと全てのオブジェクトとの接触で判定がオンになります。
プレイヤーだけにしたいです。
今回はタグを利用します。
アイテムを消すためにはDestroyメソッドを使います。
destroy()はゲームオブジェクトまたはコンポーネントを削除します。
オブジェクトの場合、子オブジェクトも削除されます。
ゲームのUIを追加する
画面に文字を表示します。
UIもオブジェクトです。画面に表示されるものは全てオブジェクトなのです。
まずはCanvasを作成します。
次にその子としてTextを作成します。
これで文字を画面に表示できます。
アイテムの個数をカウントします。
アイテムにItemタグをつけてその数を数えます。
どのオブジェクトがその役目を担うかというとGameControllerです。
こういったゲーム進行の役割はゲームコントローラーに持たせるのがよくある手法です。
ゲームのクリアを追加する
最後にゲームのクリア条件を追加します。
この機能を実現する為の必要な要素を考えてみましょう。
アイテムが全てなくなった判定
クリア時のUIを作成。
Textを利用して先ほどと同様。
If分を使ってアイテムの個数が0になったらYOU WINと表示。
Unityで描画されているものを非表示にする方法はいくつかありますが、今回はGameObjectを非アクティブにする事で非表示にします。
障害物とリスタート
ゲーム性を出すために障碍物を設置します。
要素を分解すると以下の要素を追加すれば良さそうです。
壁にぶつかった際のイベントを設定
ぶつかった際にシーンを再ロードする
ぶつかってはいけない壁を作ります。
これはオブジェクトのCubeを使います。Wallを作った時と変わりませんね。
そしてこれも複数欲しいのでプレハブにします。
次にアイテムの時と同様にコリジョン判定を追加します。
ここまできたらシーンを再起動する機能を作るだけです。
シーンをいじるためには
using UnityEngine.SceneManagement;
をスクリプトの上部に設置する必要があります。