Unity Playgroundリファレンスガイド日本語訳版の内容をもとに、スクリプトの内容を一つずつ確認していきます。プロジェクトファイルは「Unity PlayGround Referenceガイド②」のものを続けて使います。
Gameplay scripts(ゲームプレイスクリプト)
ゲームプレイスクリプトは、ゲームプレイ効果を生み出すための様々な種類のスクリプトです。これらはゲーム内の条件に左右されることなく、単独で動作します。
ObjectCreatorArea
ObjectCreatorAreaスクリプトは、長方形の領域にプレハブから新しいオブジェクトを生成するスクリプトです。このスクリプトが機能するには、インスタンスが表示される領域を定義するBoxCollider2Dコンポーネントが必要です。
Prefab To Spawn:発生させるプレファブをドラッグ&ドロップで登録します。
Spawn Interval:オブジェクトの生成間隔を秒単位で指定できます。
エネミーを自動的に創り出す
1:プロジェクトエリアのツリーからAssets>UnityPlayGround_Reference>Conditionと進み、Condition.unityをクリックします。HierarchyのルートにConditionが表示されます。
2:Hierarchyで右クリックし、メニューからCreate Emptyを選択します。
3:HierarchyでCreate Emptyを選択し、名前をEnemySpawnに変更します。その後、Transformで座標をX=7.5、Y=0とします。
4:EnemySpawnのInspectorでAdd Componentをクリックし、「ObjectCreateArea」を絞り込み検索してアタッチします。
5:EnemySpawnにObjectCreateAreaコンポーネントと同時に、Box Collider 2Dコンポーネントもアタッチされます。Box Collider 2DコンポーネントのSize欄でX=1、Y=10と入力します。シーンビュー上で緑色のコライダーの枠が上下方向に拡張されます。このエリアからプレファブがランダムに生成されます。最後にIs Trigerをオンにしましょう。
6:続いて生成されるプレファブを確認しましょう。プロジェクトエリアでBeeプレファブを選択します。すでにRigidbody 2Dコンポーネント、AutoMoveコンポーネント、Circle Collider 2Dコンポーネントがアタッチされて、必要な設定も終了した状態になっています。
7:プロジェクトエリアからBeeプレファブをEnemySpawnのObjectCreateAreaコンポーネントにあるPrefab To Spawnスロットにドラッグ&ドロップします。
8:再生ボタンをクリックして、Beeがランダムに生成されて左に移動することを確認しましょう。
Object Shooter
ObjectShooterスクリプトは、キー(デフォルトではSpace)を押したときにプレハブを生成して打ち出せるスクリプトです。このスクリプトを使用して、さまざまな攻撃を繰り出せます(もっと平和にテニスボールを打ち出しても良いです)。BulletAttributeスクリプトと併用すると手軽にスコアシステムを作ることができます。
多くの場合、このスクリプトを空のオブジェクトに割り当て、それを何らかのグラフィックスを持つ別のオブジェクトにペアレント化して使用します。このようにすることで、発射体の発射位置を正確に制御できます。
Prefab To Spawn:スロットに指定したプレファブを発射する。
Key To Press:プレファブを発射するキーを指定する。
Creation Rate:キーが押しっぱなしの場合、何秒おきに新しいプレファブを打ち出すか指定できる。
Shoot Speed:打ち出されたプレファブの初速を設定できる。
Shoot Direction:プレファブを打ち出す方向を指定できる。
Relative To Rotaion:オンにすると打ち出された方向に応じてプレファブの向きを変えられる。
爆弾を投射する
キャラクターの足場を作る
1:はじめに地面を作ろう。Hierarchyで右クリックし、Create Emptyを選択する。
2:新しく作られたGameObjectを選択し、Inspectorで名称をGroundに変更する。その後、タグをメニューからGroundに変更する。このタグ設定を忘れるとZombieeのジャンプがおかしくなるので注意。
3:GroundのInspectorでTransformコンポーネントのPositionをX=0、Y=-5.5に変更する。
4:次にAdd ComponentでBox Collider 2Dコンポーネントを絞り込み検索し、アタッチする。
5:Box Collider 2DのサイズをX=40、Y=1とする。これで地面の下に長方形の緑色のコライダーの枠が表示される。これが見えない当たり判定となり、地面の役割をはたす。
参考:Unity PlayGround Referenceガイド①「Jump」ワンポイントアドバイス
キャラクターの配置
1:プロジェクトエリアからZombieeプレファブをHierarchyにドラッグ&ドロップする。その後、シーンビュー上で位置を調整する。すでにRigidbody 2DやBox Collider 2Dなど、最低限のスクリプトはアタッチされている。
2:再生ボタンをクリックして、Zombieeを移動したり、ジャンプしたりできるか確認しよう。なお、本バージョンでは矢印キーの上キーがジャンプに割り当てられているので注意してほしい。
爆弾アイテムの投射
1:続いてスペースキーを押すと爆弾が右方向に射出されるようにスクリプトを組んでいこう。まずプロジェクトエリアからZombieeを選択し、Inspectorで「Open Prefab」をクリックする。
2:HierarchyのZombieeオブジェクトで右クリックし、Create Emptyを選択する。
3:Zombieeオブジェクトの子としてGameObjectが設定されたことを確認しよう。次にGameObjectを選択し、Inspectorで「Add Component」をクリックする。その後、Object Shooterを絞り込み検索してアタッチする。
4:GameObjectのInspectorでTransformコンポーネントから、PositionをX=1.2、Y=1.2、SizeをX=0.1、Y=0.1に設定する。これでZombieeの右上からアイテムが射出されるようになる。
5:プロジェクトエリアのBombプレファブをObject ShooterコンポーネントのPrefab To Spawnスロットにドラッグ&ドロップする。その後、「<」ボタンでシーンビューに戻る。
7:再生ボタンをクリック後、スペースキーを押したら爆弾が投射されるのを確認しよう。
Pick Up And Hold
PickUpAndHoldスクリプトは何かを拾ったり、落としたりする能力をキャラクターに与えるために使用されます。 ConditionAreaスクリプトと連携させて、オブジェクトを拾って特定の場所まで持っていくようなゲームプレイを作ることができます。
オブジェクトを「ピックアップ可能」にするには、そのオブジェクトにPickupタグを割り当て、任意のCollider2Dを指定する必要があります。
Pickup Key:アイテムを拾うためのキーを指定する。
Drop Keyは:アイテムを落とすためのキーを指定する。
Pick Up Distance:オブジェクトがプレイヤーから拾い上げられるまでの最大距離を指定する。
サッカーボールを持ち運ぶ
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにしておこう。これでBeeが一時的に出現しなくなる。
2:プロジェクトエリアからFootballを選び、Hierarchyにドラッグ&ドロップする。InspectorでタグがPickupになっているか確認しよう。これが別のタグになっていたり、タグがついていなかったりしたら、アイテムを拾うことはできない。
3:プロジェクトエリアのZombieeプレファブをクリックし、Inspectorで「Open Prefab」をクリックする。
4:ZombieeプレファブのInspectorから「Add Component」をクリックし、「Pick Up And Hold」スクリプトを絞り込み検索してアタッチする。
5:Pick Up And HoldコンポーネントでPick Up Distanceを3に設定し、「<」ボタンでシーンビューに戻る。
6:再生ボタンをクリックして、ゾンビーを動かしてサッカーボールに当たると、サッカーボールが転がっていくか確認しよう。
7:続いてサッカーボールの近くでBキーを押すと、ゾンビーとサッカーボールがバインドされ、一緒に移動できるか確認しよう。最後にBキーを押してサッカーボールが離れれば成功だ。また、Bキーを押しながら、HierarchyでZombieeとFootballの親子関係が切り替わる様を確認しよう。
Timed Self Destruct
TimedSelfDestructスクリプトは、時間経過にともなってオブジェクトを自動的に削除するためのスクリプトです。武器から発射されたアイテムや、ランダムに生成された敵キャラクターで、シーンが乱雑になったり、メモリ不足でエラーが発生したりすることを防ぐために使用します。
Time to Destruction:オブジェクトが生成後、消滅するまでの秒数
爆弾とエネミーを自動的に削除する
1:はじめにHierarchyからFootballインスタンスを選択し、Inspectorでチェックボックスをオフにしておこう。これで一時的にサッカーボールが表示されなくなる。
2:プロジェクトエリアからBeeプレファブを選択し、Inspectorで「Open Prefab」をクリックする。
3:BeeプレファブのInspectorから「Add Component」をクリックし、「Timed Self Destruct」スクリプトを絞り込み検索してアタッチする。
4:InspectorのTimed Self DestructコンポーネントでTime to Destructionの値を3にしよう。その後「<」ボタンでシーンビューに戻ろう。
5:これと同じことをBombプレファブにも行う。まずプロジェクトエリアでBombプレファブを選択し、Inspectorで「Open Prefab」をクリックし・・・
6:BombプレファブのInspectorで「Add Component」をクリック後、「Timed Self Destruct」スクリプトを絞り込み検索して・・・
7:最後にInspectorのTimed Self DestructコンポーネントでTime to Destructionの値を3にしよう。その後「<」ボタンでシーンビューに戻る。
8:その後、HierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオンんする。
9:再生ボタンをクリックして、BeeやBombが一定時間で消失することを確認しよう。生成されたオブジェクトはHierarchyに表示されるが、一定数以上は増えない(自動的に消える)ことがわかる。
Attributes(アトリビュート)
Attributesはオブジェクトが持つ性質を定義するスクリプトです。タグに似た役割を持っていますが、タグとは異なり、追加データを含めることができます。
Bullet Attribute
BulletAttrbuteがアタッチされたオブジェクトが、DestroyForPointsAttributeがアタッチされたオブジェクトに接触すると、BulletAttrbuteがアタッチされたオブジェクトを発射したプレイヤーはポイントを獲得できます。獲得したポイントはUserinterfaceプレファブで画面上に表示させられます。
爆弾で攻撃するための準備
1:プロジェクトエリアのBombプレファブを選択し、Inspectorで「Open Prefab」をクリックしよう。
2:BombプレファブのInspectorで「Add Component」から「Bullet」を絞り込み検索し、アタッチします。
3:アタッチできたら「<」ボタンでシーンビューに戻りましょう。
4:プロジェクトエリアのツリーからAssets>Prefabs>Userinterfaceを選択し、Hierarchynドラッグ&ドロップします。
5:再生ボタンをクリックし、画面にUIが表示されることを確認します。なお、この時点では表示内容は変化しません。
追記
UIが表示されない場合は、Hierarchy>Userinterface>StatsPanelと進み、InspectorでStatsPanelのチェックボックスをオンにしよう。
Destroy For Points Attribute
DestroyForPointsAttributeスクリプトはBulletAttributeスクリプトとセットで使います。BulletAttributeスクリプトが付いているオブジェクトが、DestroyForPointsAttributeに接触した場合、オブジェクトが破壊され、BulletAttributeスクリプトがついたオブジェクトを発射したプレイヤーにポイントを与えます。
1:プロジェクトエリアからZombieeプレファブを選択し、Inspectorから「Open Prefab」をクリックする。
2:HierarchyからGameObjectを選択し、タグを「Player」に変更する。これでZombieeとGameObjectの両方にPlayerタグが設定されたことになる。タグを設定し終わったら「<」ボタンでシーンビューに戻る。
3:プロジェクトエリアからBeeプレファブを選択し、Inspectorから「Open Prefab」をクリックする。
4:InspectorのAdd Componentから「Destroy For points」を絞り込み検索し、アタッチする。
5:Destroy for pointsコンポーネントが表示されたら、「<」ボタンでシーンビューに戻る。なお、この時「Points Worth」の値を変えると、プレファブが破壊された時に得られるポイントを変更できる。
7:Bombを発射して、Beeに当ててみよう。Bombが当たればBeeが消失し、スコアが1増えれば成功だ。その後、Beeを5匹撃破したら「Player 1 wins!」と表示されるか確認しよう。
追記
最初から画面にPlayer 1 wins!と表示されてしまう場合は、HierarchyのUserinterfaceオブジェクトからWinPanelを開き、InspectorのWinPanelチェックボックスをオフにする。
爆弾でエネミーを倒してポイントを稼ぐ
ワンポイントアドバイス
UserinterfaceプレファブのUI ScriptコンポーネントにあるScre To Winの値を変えると「Player 1 wins!」を表示するために必要な獲得ポイントが変化する。
Collectable Attribute
Player(またはPlayer 2)タグがついたオブジェクトが、CollectableAttributeスクリプトがついたオブジェクトと接触すると、プレイヤーにポイントが付与される。
Points Worth:アイテムに触れたときに得られるポイント
アイテムを回収する
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにしておこう。これで一時的にBeeが出現しなくなる。
2:プロジェクトエリアでStarプレファブを選択し、InspectorでOpen Prefabをクリックする。
3:Star PrefabのInspectorでAdd Componentから「Collectable」を絞り込み検索し、アタッチする。
4:Collectableコンポーネントがついたら、「<」ボタンをクリックしてシーンビューに戻る。このとき、Points Worthの値を変えると得られるポイントを変更できる。
5:StarプレファブをHierarchyにドラッグ&ドロップし、インスタンスの場所をシーンビュー上で調整する。これを5回繰り返す。
※:再生ボタンをクリックし、Zombieeを操作して、Starに触れたらStarが消えてポイントが増えるか確認しよう。5つStarをとった時、「Player 1 wins!」が表示されたら成功だ。
Health System Attribute
HealthSystemAttributeスクリプトはModifyHealthAttributeスクリプトと連携して機能し、体力システムとして機能します。体力を持つオブジェクトはプレイヤーキャラクターだけに留まらず、敵キャラクターや、一定ダメージを与えると破壊される壁など、オブジェクト全般にわたります。Player(またはPlayer 2)タグのついたオブジェクトに本スクリプを付与し、Userinterfaceプレファブと連携させると、体力が0になった時点でゲームオーバーのメッセージを表示させられます。
なお、本スクリプトはModifyHealthAttributeスクリプトと連携して使用します。ModifyHealthAttributeを持つオブジェクトは、HealthSystemAttributeを持たないオブジェクトには影響しません。
Health:オブジェクトに付与される体力
アバターに体力システムをつける
Starを階層構造で整理して非表示にする
1:はじめにシーンビュー上のStarをすべて非表示にしよう。一つずつチェックボックスをオフにしてもいいが、GameObjectにまとめることで効率的に管理できる。はじめにHierarchy上で右クリックし、Create Emptyを選択する。
2:作成したGameObjectをクリックし、Inspectorで名前をStarに変更する。
3:Hierarchy上のStarオブジェクトを先ほど作成した空のStarオブジェクトにまとめて移動させる。
4:親のStarオブジェクトを選択し、Inspectorでチェックボックスをオフにする。
Zombieeの体力システムを作る
1:プロジェクトエリアでZombieeを選択し、InspectorでOpen Prefabをクリックしよう。
2:ZombieeのプレファブにあるInspectorのAdd Componentで「Health System」を絞り込み検索し、アタッチする。
3:「<」ボタンをクリックしてシーンビューに戻る。なお、このときHealth SystemコンポーネントのHealthの値を変えると、デフォルトの体力値を変更できる。
Modify Health Attribute
Modify Health AttributeスクリプトはHealthSystemAttributeスクリプトとセットで使用し、オブジェクトの体力を増減させられます。これにより敵キャラクターを作ることも、ポーションなどを作ることもできます。
Destroy When Activated:オンにすると効果が発生したときにオブジェクトが削除される。
Health Change:体力の変化値を調整できる。マイナスにすると体力が減り、プラスにすると体力が増える。
エネミーにぶつかったら体力を減らす
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオンにしよう。
2:プロジェクトエリアのBeeプレファブを選択し、Open Prefabをクリックする。
3:BeeプレファブのInspectorからAdd Componentで「Mdify Health」を絞り込み検索し、アタッチする。
4:Modify HealthコンポーネントでDestroy When Activeをオンにして、「<」ボタンをクリックし、シーンビューに戻る。このときHealth Changeの値を変えると、ダメージ値を変更できる。
5:シーンビューに戻ったら、さっそく再生ボタンをクリックしよう。
6:ZombieeがBeeに当たったらHealthが1ずつ減り、Healthが0になった時にGameoverと表示されれば成功だ。一方でBombを投げてBeeを破壊し、5匹倒したらゲームクリアとなる。これでシンプルなアクションシューティングゲームが完成した。
Resource
Resourceスクリプトはプレイヤーが一時的に蓄え、消費するアイテムを管理できるスクリプトです。Player(またはPlayer 2)タグのついたオブジェクトが、Resourceスクリプトがついたオブジェクトに触れると、Resourceスクリプトがついたオブジェクトが非表示になり、インベントリの数字が増加します。他のスクリプトと組み合わせて、クラフトシステムを作ったり、鍵のかかった扉や宝箱を作ったりすることができます。
Type of Resorce:リソースの種類を変更できます。
Ammount:アイテムを取った時のリソースの増加量を設定できます。マイナスにするとリソースが減少します。
Add/Remove types:リソースの種類を増やしたり、減らしたりできます。
+を押して新しいリソースを設定でき、-を押して既存のリソースを減らせます。
アイテムを回収してインベントリに表示させる
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにする。これで一時的にBeeが発生しなくなる。
2:プロジェクトエリアのCoinプレファブを選択し、InspectorのOpen Prefabをクリックする。
3:Coinプレファブを開き、InspectorのAdd Componentで「Resource」と入力し、絞り込み検索を行ってアタッチする。
4:ResourceコンポーネントのType of Resorceで「Coin」を選び、「<」ボタンでシーンビューに戻る。このときAmmountの値を変更すれば、アイテム入手時に得られる値を変えられる。
5:続いてCoinのインスタンスを作るわけだが、今回は最初から階層構造を設定しておこう。まずHierarchy上で右クリックし、「Create Empty」を選択する。
6:作成されたGameObjectを選択し、Inspectorで名前を「Coin」とする。
7:プロジェクトエリアのCoinプレファブをHierarchyのCoinオブジェクトの子供になるようにドラッグ&ドロップする。これを3回繰り返す。
8:作成されたCoinのインスタンスをシーンビュー上で適性に配置する。