LoginSignup
0
0

More than 3 years have passed since last update.

Unity PlayGround Referenceガイド②

Last updated at Posted at 2020-11-23

Unity Playgroundリファレンスガイド日本語訳版の内容をもとに、スクリプトの内容を一つずつ確認していきます。プロジェクトファイルは「Unity PlayGround Referenceガイド②」のものを続けて使います。

Gameplay scripts(ゲームプレイスクリプト)

ゲームプレイスクリプトは、ゲームプレイ効果を生み出すための様々な種類のスクリプトです。これらはゲーム内の条件に左右されることなく、単独で動作します。

ObjectCreatorArea

image.png
ObjectCreatorAreaスクリプトは、長方形の領域にプレハブから新しいオブジェクトを生成するスクリプトです。このスクリプトが機能するには、インスタンスが表示される領域を定義するBoxCollider2Dコンポーネントが必要です。

image.png
Prefab To Spawn:発生させるプレファブをドラッグ&ドロップで登録します。
Spawn Interval:オブジェクトの生成間隔を秒単位で指定できます。

エネミーを自動的に創り出す

スクリーンショット (1433).png
1:プロジェクトエリアのツリーからAssets>UnityPlayGround_Reference>Conditionと進み、Condition.unityをクリックします。HierarchyのルートにConditionが表示されます。

スクリーンショット (1434).png
2:Hierarchyで右クリックし、メニューからCreate Emptyを選択します。

スクリーンショット (1435).png
3:HierarchyでCreate Emptyを選択し、名前をEnemySpawnに変更します。その後、Transformで座標をX=7.5、Y=0とします。

スクリーンショット (1436).png
4:EnemySpawnのInspectorでAdd Componentをクリックし、「ObjectCreateArea」を絞り込み検索してアタッチします。

スクリーンショット (1444).png
5:EnemySpawnにObjectCreateAreaコンポーネントと同時に、Box Collider 2Dコンポーネントもアタッチされます。Box Collider 2DコンポーネントのSize欄でX=1、Y=10と入力します。シーンビュー上で緑色のコライダーの枠が上下方向に拡張されます。このエリアからプレファブがランダムに生成されます。最後にIs Trigerをオンにしましょう。

スクリーンショット (1438).png
6:続いて生成されるプレファブを確認しましょう。プロジェクトエリアでBeeプレファブを選択します。すでにRigidbody 2Dコンポーネント、AutoMoveコンポーネント、Circle Collider 2Dコンポーネントがアタッチされて、必要な設定も終了した状態になっています。

スクリーンショット (1439).png
7:プロジェクトエリアからBeeプレファブをEnemySpawnのObjectCreateAreaコンポーネントにあるPrefab To Spawnスロットにドラッグ&ドロップします。

スクリーンショット (1440).png
8:再生ボタンをクリックして、Beeがランダムに生成されて左に移動することを確認しましょう。

Object Shooter

image.png
ObjectShooterスクリプトは、キー(デフォルトではSpace)を押したときにプレハブを生成して打ち出せるスクリプトです。このスクリプトを使用して、さまざまな攻撃を繰り出せます(もっと平和にテニスボールを打ち出しても良いです)。BulletAttributeスクリプトと併用すると手軽にスコアシステムを作ることができます。
多くの場合、このスクリプトを空のオブジェクトに割り当て、それを何らかのグラフィックスを持つ別のオブジェクトにペアレント化して使用します。このようにすることで、発射体の発射位置を正確に制御できます。

image.png
Prefab To Spawn:スロットに指定したプレファブを発射する。
Key To Press:プレファブを発射するキーを指定する。
Creation Rate:キーが押しっぱなしの場合、何秒おきに新しいプレファブを打ち出すか指定できる。
Shoot Speed:打ち出されたプレファブの初速を設定できる。
Shoot Direction:プレファブを打ち出す方向を指定できる。
Relative To Rotaion:オンにすると打ち出された方向に応じてプレファブの向きを変えられる。

爆弾を投射する

キャラクターの足場を作る

スクリーンショット (1445).png
1:はじめに地面を作ろう。Hierarchyで右クリックし、Create Emptyを選択する。

スクリーンショット (1446).png
2:新しく作られたGameObjectを選択し、Inspectorで名称をGroundに変更する。その後、タグをメニューからGroundに変更する。このタグ設定を忘れるとZombieeのジャンプがおかしくなるので注意。

スクリーンショット (1617).png
3:GroundのInspectorでTransformコンポーネントのPositionをX=0、Y=-5.5に変更する。

スクリーンショット (1618).png
4:次にAdd ComponentでBox Collider 2Dコンポーネントを絞り込み検索し、アタッチする。

スクリーンショット (1449).png
5:Box Collider 2DのサイズをX=40、Y=1とする。これで地面の下に長方形の緑色のコライダーの枠が表示される。これが見えない当たり判定となり、地面の役割をはたす。

参考:Unity PlayGround Referenceガイド①「Jump」ワンポイントアドバイス

キャラクターの配置

スクリーンショット (1451).png
1:プロジェクトエリアからZombieeプレファブをHierarchyにドラッグ&ドロップする。その後、シーンビュー上で位置を調整する。すでにRigidbody 2DやBox Collider 2Dなど、最低限のスクリプトはアタッチされている。

スクリーンショット (1452).png
2:再生ボタンをクリックして、Zombieeを移動したり、ジャンプしたりできるか確認しよう。なお、本バージョンでは矢印キーの上キーがジャンプに割り当てられているので注意してほしい。

爆弾アイテムの投射
スクリーンショット (1453).png
1:続いてスペースキーを押すと爆弾が右方向に射出されるようにスクリプトを組んでいこう。まずプロジェクトエリアからZombieeを選択し、Inspectorで「Open Prefab」をクリックする。

スクリーンショット (1454).png
2:HierarchyのZombieeオブジェクトで右クリックし、Create Emptyを選択する。

スクリーンショット (1456).png
3:Zombieeオブジェクトの子としてGameObjectが設定されたことを確認しよう。次にGameObjectを選択し、Inspectorで「Add Component」をクリックする。その後、Object Shooterを絞り込み検索してアタッチする。

スクリーンショット (1457).png
4:GameObjectのInspectorでTransformコンポーネントから、PositionをX=1.2、Y=1.2、SizeをX=0.1、Y=0.1に設定する。これでZombieeの右上からアイテムが射出されるようになる。

スクリーンショット (1459).png
5:プロジェクトエリアのBombプレファブをObject ShooterコンポーネントのPrefab To Spawnスロットにドラッグ&ドロップする。その後、「<」ボタンでシーンビューに戻る。

スクリーンショット (1460).png
6:シーンビューに戻ったところ。これで準備は整った。

スクリーンショット (1461).png
7:再生ボタンをクリック後、スペースキーを押したら爆弾が投射されるのを確認しよう。

Pick Up And Hold

image.png

PickUpAndHoldスクリプトは何かを拾ったり、落としたりする能力をキャラクターに与えるために使用されます。 ConditionAreaスクリプトと連携させて、オブジェクトを拾って特定の場所まで持っていくようなゲームプレイを作ることができます。
オブジェクトを「ピックアップ可能」にするには、そのオブジェクトにPickupタグを割り当て、任意のCollider2Dを指定する必要があります。

image.png

Pickup Key:アイテムを拾うためのキーを指定する。
Drop Keyは:アイテムを落とすためのキーを指定する。
Pick Up Distance:オブジェクトがプレイヤーから拾い上げられるまでの最大距離を指定する。

サッカーボールを持ち運ぶ

スクリーンショット (1462).png
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにしておこう。これでBeeが一時的に出現しなくなる。

スクリーンショット (1463).png
2:プロジェクトエリアからFootballを選び、Hierarchyにドラッグ&ドロップする。InspectorでタグがPickupになっているか確認しよう。これが別のタグになっていたり、タグがついていなかったりしたら、アイテムを拾うことはできない。

スクリーンショット (1465).png
3:プロジェクトエリアのZombieeプレファブをクリックし、Inspectorで「Open Prefab」をクリックする。

スクリーンショット (1466).png
4:ZombieeプレファブのInspectorから「Add Component」をクリックし、「Pick Up And Hold」スクリプトを絞り込み検索してアタッチする。

スクリーンショット (1468).png
5:Pick Up And HoldコンポーネントでPick Up Distanceを3に設定し、「<」ボタンでシーンビューに戻る。

スクリーンショット (1470).png
6:再生ボタンをクリックして、ゾンビーを動かしてサッカーボールに当たると、サッカーボールが転がっていくか確認しよう。

スクリーンショット (1469).png
7:続いてサッカーボールの近くでBキーを押すと、ゾンビーとサッカーボールがバインドされ、一緒に移動できるか確認しよう。最後にBキーを押してサッカーボールが離れれば成功だ。また、Bキーを押しながら、HierarchyでZombieeとFootballの親子関係が切り替わる様を確認しよう。

Timed Self Destruct

image.png
TimedSelfDestructスクリプトは、時間経過にともなってオブジェクトを自動的に削除するためのスクリプトです。武器から発射されたアイテムや、ランダムに生成された敵キャラクターで、シーンが乱雑になったり、メモリ不足でエラーが発生したりすることを防ぐために使用します。

image.png
Time to Destruction:オブジェクトが生成後、消滅するまでの秒数

爆弾とエネミーを自動的に削除する

スクリーンショット (1473).png
1:はじめにHierarchyからFootballインスタンスを選択し、Inspectorでチェックボックスをオフにしておこう。これで一時的にサッカーボールが表示されなくなる。

スクリーンショット (1474).png
2:プロジェクトエリアからBeeプレファブを選択し、Inspectorで「Open Prefab」をクリックする。

スクリーンショット (1475).png
3:BeeプレファブのInspectorから「Add Component」をクリックし、「Timed Self Destruct」スクリプトを絞り込み検索してアタッチする。

スクリーンショット (1476).png
4:InspectorのTimed Self DestructコンポーネントでTime to Destructionの値を3にしよう。その後「<」ボタンでシーンビューに戻ろう。

スクリーンショット (1477).png
5:これと同じことをBombプレファブにも行う。まずプロジェクトエリアでBombプレファブを選択し、Inspectorで「Open Prefab」をクリックし・・・

スクリーンショット (1478).png
6:BombプレファブのInspectorで「Add Component」をクリック後、「Timed Self Destruct」スクリプトを絞り込み検索して・・・

スクリーンショット (1479).png
7:最後にInspectorのTimed Self DestructコンポーネントでTime to Destructionの値を3にしよう。その後「<」ボタンでシーンビューに戻る。

スクリーンショット (1480).png
8:その後、HierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオンんする。

スクリーンショット (1481).png
9:再生ボタンをクリックして、BeeやBombが一定時間で消失することを確認しよう。生成されたオブジェクトはHierarchyに表示されるが、一定数以上は増えない(自動的に消える)ことがわかる。

Attributes(アトリビュート)

Attributesはオブジェクトが持つ性質を定義するスクリプトです。タグに似た役割を持っていますが、タグとは異なり、追加データを含めることができます。

Bullet Attribute

image.png

BulletAttrbuteがアタッチされたオブジェクトが、DestroyForPointsAttributeがアタッチされたオブジェクトに接触すると、BulletAttrbuteがアタッチされたオブジェクトを発射したプレイヤーはポイントを獲得できます。獲得したポイントはUserinterfaceプレファブで画面上に表示させられます。

爆弾で攻撃するための準備

スクリーンショット (1484).png
1:プロジェクトエリアのBombプレファブを選択し、Inspectorで「Open Prefab」をクリックしよう。

スクリーンショット (1485).png
2:BombプレファブのInspectorで「Add Component」から「Bullet」を絞り込み検索し、アタッチします。

スクリーンショット (1486).png
3:アタッチできたら「<」ボタンでシーンビューに戻りましょう。

スクリーンショット (1487).png
4:プロジェクトエリアのツリーからAssets>Prefabs>Userinterfaceを選択し、Hierarchynドラッグ&ドロップします。

スクリーンショット (1488).png
5:再生ボタンをクリックし、画面にUIが表示されることを確認します。なお、この時点では表示内容は変化しません。

追記

スクリーンショット (1619).png
UIが表示されない場合は、Hierarchy>Userinterface>StatsPanelと進み、InspectorでStatsPanelのチェックボックスをオンにしよう。

Destroy For Points Attribute

image.png

DestroyForPointsAttributeスクリプトはBulletAttributeスクリプトとセットで使います。BulletAttributeスクリプトが付いているオブジェクトが、DestroyForPointsAttributeに接触した場合、オブジェクトが破壊され、BulletAttributeスクリプトがついたオブジェクトを発射したプレイヤーにポイントを与えます。

スクリーンショット (1502).png
1:プロジェクトエリアからZombieeプレファブを選択し、Inspectorから「Open Prefab」をクリックする。

スクリーンショット (1504).png
2:HierarchyからGameObjectを選択し、タグを「Player」に変更する。これでZombieeとGameObjectの両方にPlayerタグが設定されたことになる。タグを設定し終わったら「<」ボタンでシーンビューに戻る。

スクリーンショット (1489).png
3:プロジェクトエリアからBeeプレファブを選択し、Inspectorから「Open Prefab」をクリックする。

スクリーンショット (1490).png
4:InspectorのAdd Componentから「Destroy For points」を絞り込み検索し、アタッチする。

スクリーンショット (1491).png
5:Destroy for pointsコンポーネントが表示されたら、「<」ボタンでシーンビューに戻る。なお、この時「Points Worth」の値を変えると、プレファブが破壊された時に得られるポイントを変更できる。

スクリーンショット (1492).png
6:これで準備は整った。再生ボタンをクリックしよう。

スクリーンショット (1499).png
7:Bombを発射して、Beeに当ててみよう。Bombが当たればBeeが消失し、スコアが1増えれば成功だ。その後、Beeを5匹撃破したら「Player 1 wins!」と表示されるか確認しよう。

追記

スクリーンショット (1620).png
最初から画面にPlayer 1 wins!と表示されてしまう場合は、HierarchyのUserinterfaceオブジェクトからWinPanelを開き、InspectorのWinPanelチェックボックスをオフにする。

爆弾でエネミーを倒してポイントを稼ぐ

ワンポイントアドバイス

スクリーンショット (1500).png
UserinterfaceプレファブのUI ScriptコンポーネントにあるScre To Winの値を変えると「Player 1 wins!」を表示するために必要な獲得ポイントが変化する。

Collectable Attribute

image.png
Player(またはPlayer 2)タグがついたオブジェクトが、CollectableAttributeスクリプトがついたオブジェクトと接触すると、プレイヤーにポイントが付与される。

image.png
Points Worth:アイテムに触れたときに得られるポイント

アイテムを回収する

スクリーンショット (1505).png
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにしておこう。これで一時的にBeeが出現しなくなる。

スクリーンショット (1506).png
2:プロジェクトエリアでStarプレファブを選択し、InspectorでOpen Prefabをクリックする。

スクリーンショット (1507).png
3:Star PrefabのInspectorでAdd Componentから「Collectable」を絞り込み検索し、アタッチする。

スクリーンショット (1508).png
4:Collectableコンポーネントがついたら、「<」ボタンをクリックしてシーンビューに戻る。このとき、Points Worthの値を変えると得られるポイントを変更できる。

スクリーンショット (1510).png
5:StarプレファブをHierarchyにドラッグ&ドロップし、インスタンスの場所をシーンビュー上で調整する。これを5回繰り返す。

スクリーンショット (1512).png
※:再生ボタンをクリックし、Zombieeを操作して、Starに触れたらStarが消えてポイントが増えるか確認しよう。5つStarをとった時、「Player 1 wins!」が表示されたら成功だ。

Health System Attribute

image.png
HealthSystemAttributeスクリプトはModifyHealthAttributeスクリプトと連携して機能し、体力システムとして機能します。体力を持つオブジェクトはプレイヤーキャラクターだけに留まらず、敵キャラクターや、一定ダメージを与えると破壊される壁など、オブジェクト全般にわたります。Player(またはPlayer 2)タグのついたオブジェクトに本スクリプを付与し、Userinterfaceプレファブと連携させると、体力が0になった時点でゲームオーバーのメッセージを表示させられます。

なお、本スクリプトはModifyHealthAttributeスクリプトと連携して使用します。ModifyHealthAttributeを持つオブジェクトは、HealthSystemAttributeを持たないオブジェクトには影響しません。
image.png
Health:オブジェクトに付与される体力

アバターに体力システムをつける

Starを階層構造で整理して非表示にする
スクリーンショット (1513).png
1:はじめにシーンビュー上のStarをすべて非表示にしよう。一つずつチェックボックスをオフにしてもいいが、GameObjectにまとめることで効率的に管理できる。はじめにHierarchy上で右クリックし、Create Emptyを選択する。

スクリーンショット (1514).png
2:作成したGameObjectをクリックし、Inspectorで名前をStarに変更する。

スクリーンショット (1515).png
3:Hierarchy上のStarオブジェクトを先ほど作成した空のStarオブジェクトにまとめて移動させる。

スクリーンショット (1516).png
4:親のStarオブジェクトを選択し、Inspectorでチェックボックスをオフにする。

Zombieeの体力システムを作る

スクリーンショット (1517).png
1:プロジェクトエリアでZombieeを選択し、InspectorでOpen Prefabをクリックしよう。

スクリーンショット (1518).png
2:ZombieeのプレファブにあるInspectorのAdd Componentで「Health System」を絞り込み検索し、アタッチする。

スクリーンショット (1519).png
3:「<」ボタンをクリックしてシーンビューに戻る。なお、このときHealth SystemコンポーネントのHealthの値を変えると、デフォルトの体力値を変更できる。

スクリーンショット (1520).png
4:これでZombiee側の設定は終了だ。

Modify Health Attribute

image.png

Modify Health AttributeスクリプトはHealthSystemAttributeスクリプトとセットで使用し、オブジェクトの体力を増減させられます。これにより敵キャラクターを作ることも、ポーションなどを作ることもできます。

image.png
Destroy When Activated:オンにすると効果が発生したときにオブジェクトが削除される。
Health Change:体力の変化値を調整できる。マイナスにすると体力が減り、プラスにすると体力が増える。

エネミーにぶつかったら体力を減らす

スクリーンショット (1521).png
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオンにしよう。

スクリーンショット (1522).png
2:プロジェクトエリアのBeeプレファブを選択し、Open Prefabをクリックする。

スクリーンショット (1523).png
3:BeeプレファブのInspectorからAdd Componentで「Mdify Health」を絞り込み検索し、アタッチする。

スクリーンショット (1524).png
4:Modify HealthコンポーネントでDestroy When Activeをオンにして、「<」ボタンをクリックし、シーンビューに戻る。このときHealth Changeの値を変えると、ダメージ値を変更できる。

スクリーンショット (1525).png
5:シーンビューに戻ったら、さっそく再生ボタンをクリックしよう。

スクリーンショット (1527).png
6:ZombieeがBeeに当たったらHealthが1ずつ減り、Healthが0になった時にGameoverと表示されれば成功だ。一方でBombを投げてBeeを破壊し、5匹倒したらゲームクリアとなる。これでシンプルなアクションシューティングゲームが完成した。

Resource

image.png
Resourceスクリプトはプレイヤーが一時的に蓄え、消費するアイテムを管理できるスクリプトです。Player(またはPlayer 2)タグのついたオブジェクトが、Resourceスクリプトがついたオブジェクトに触れると、Resourceスクリプトがついたオブジェクトが非表示になり、インベントリの数字が増加します。他のスクリプトと組み合わせて、クラフトシステムを作ったり、鍵のかかった扉や宝箱を作ったりすることができます。

image.png
Type of Resorce:リソースの種類を変更できます。
Ammount:アイテムを取った時のリソースの増加量を設定できます。マイナスにするとリソースが減少します。
Add/Remove types:リソースの種類を増やしたり、減らしたりできます。

image.png
+を押して新しいリソースを設定でき、-を押して既存のリソースを減らせます。

image.png
リソースの例(コイン、鍵、スター)

アイテムを回収してインベントリに表示させる

スクリーンショット (1528).png
1:はじめにHierarchyでEnemySpawnを選択し、Inspectorでチェックボックスをオフにする。これで一時的にBeeが発生しなくなる。

スクリーンショット (1529).png
2:プロジェクトエリアのCoinプレファブを選択し、InspectorのOpen Prefabをクリックする。

スクリーンショット (1530).png
3:Coinプレファブを開き、InspectorのAdd Componentで「Resource」と入力し、絞り込み検索を行ってアタッチする。

スクリーンショット (1531).png
4:ResourceコンポーネントのType of Resorceで「Coin」を選び、「<」ボタンでシーンビューに戻る。このときAmmountの値を変更すれば、アイテム入手時に得られる値を変えられる。

スクリーンショット (1532).png
5:続いてCoinのインスタンスを作るわけだが、今回は最初から階層構造を設定しておこう。まずHierarchy上で右クリックし、「Create Empty」を選択する。

スクリーンショット (1533).png
6:作成されたGameObjectを選択し、Inspectorで名前を「Coin」とする。

スクリーンショット (1534).png
7:プロジェクトエリアのCoinプレファブをHierarchyのCoinオブジェクトの子供になるようにドラッグ&ドロップする。これを3回繰り返す。

スクリーンショット (1535).png
8:作成されたCoinのインスタンスをシーンビュー上で適性に配置する。

スクリーンショット (1536).png
9:再生ボタンをクリックして、ZombieeがCoinに触れたらインベントリの値が変わることを確認しよう。

スクリーンショット (1538).png
10:最後にHierarchyのCoinオブジェクトを選択し、Inspectorでチェックボックスをオフにしておこう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0