Playground リファレンス ガイド 1/2

この記事は Playground: Reference Guide を翻訳したものです。日本人の Unity 初心者向けに表現に手を加えている箇所があります。

1. Movement スクリプト

このカテゴリのスクリプトは プレイヤーや障害物、NPC などの GameObject を動かすためのものです。Playground は物理エンジン (Physics) を使って動かすように作られています。つまり、これらのスクリプトは Rigidbody2D コンポーネントに依存します。また、他のオブジェクトとの当たり判定をとりたい場合は Collider2D コンポーネントが必要です。


Auto Move(一方向に動く)

指定された方向に力を加え続けます。ロケットや矢など、また自分の力で飛んでいくようなオブジェクトを作りたい時に役に立ちます。Direction プロパティにはベクトル (Vector2) で方向と力の大きさを指定します。Releative To Rotation プロパティにチェックを入れると、自分自身との相対的な方向に対して力を加えます。つまり自分が回転した時には進む方向が自分の向きに合わせて変わります。

Scene ビュー上では緑色の矢印の形をした gizmo が表示されます。これは力が加わる方向を表しています。矢印の大きさは力の大きさを表しています。

補足: 後述する ObjectShooter スクリプトでオブジェクト(プレハブ)を発射する場合は、ObjectShooter には既に発射する時に力を加える機能があることに留意してください。オブジェクトに「自分の力で飛んでいく」ような動きをさせなくてもよい場合は、AutoMove を使う必要はありません。


Auto Rotate(一定速度で回転する)

Audo Rotate を使うとオブジェクトを一定速度で回転させることができます。使い方としては、飾りとなるオブジェクトを回転させたり、ConditionCollision と組み合わせることで、回転する障害物を作ったりすることができます。Rotation Speed を変えることで回転速度を変えることができ、負の値を指定することで逆時計回りに回転させることができます。

Auto Rotate をオブジェクトに追加すると、回転方向を表す緑色の矢印の形をした gizmo がシーンビューに表示されます。


Camera Follow(カメラを動かす)

Camera Follow は Camera のオブジェクト(Camera コンポーネントが追加されているオブジェクト)に追加して使います。プレイヤーを中心にとらえてカメラを動かすアクションアドベンチャーゲームなどを作れます。Target プロパティにはカメラが追いかける GameObject を割り当てます。

Use Bounds プロパティにチェックを入れると、カメラが動く範囲となる矩形を設定することができます。

Bounds(境界線)はシーンビューには黄色い矩形の gizmo として表示されます。Bounds の上下左右の値は Inspector から設定することができます。


Follow Target(指定したものを追う)

Follow Target を使うと、Target に指定された GameObject を追いかけ続けます。

Look at target プロパティをチェックすると、オブジェクトはターゲットの方向を向きながらターゲットを追いかけます。


Jump(キーを押してジャンプする)

指定されたキーを押すと、上に跳ね上がります。Key プロパティで跳ね上がるキーを指定することができます。ジャンプする動きを作ることができます。

空中でジャンプしないようにするには Check ground をチェックし、Ground tag に地面として判定するタグを指定します。このように設定すると、Ground tag に指定しているタグを持つオブジェクトと接触している時だけジャンプできるようになります。

Check Ground がチェックされていない時は、空中で何度でもジャンプできます。そうすると、羽ばたいて飛ぶような動作を作ることができます。

Jump Strength プロパティと、Rigidbody2DLinear Drag プロパティを変更することで、ジャンプの挙動を調整できます。


Move(キーを押して移動する)

カーソルキーか WASD キーのどちらかで GameObject を操作することができるようになります。

Type of Control プロパティを指定すると、カーソルキー (Arrow Keys)と WASD キーのどちらで操作するかを指定できます。2 つのオブジェクトに Move スクリプトを追加して、片方を WASD キーで操作し、もう一方をカーソルキーで操作するように設定することで、一つのキーボードで二人プレイのゲームを作ることができます。

Movement Type を変更することで、垂直方向のみ・水平方向のみ・上下左右からどの方向に動かせるようにするか設定することができます。例えば、水平方向のみに動かせるように設定して、Jump スクリプトと組み合わせるとプラットフォーマータイプのゲームを作ることができます。

水平または垂直方向に移動可能な方向を制限したとしても、他のオブジェクトに衝突すると結果として制限している方向に動いてしまいます。衝突した時にも水平または垂直方向に動かないようにするには、Rigidbody2D コンポーネントの Constraits カテゴリ内にある Freeze Position プロパティを設定します。


Partrol(指定した座標を巡回する)

Patrol を使うと、指定した複数の座標 (waypoint) に向かって順番に移動します。Stops プロパティに複数の waypoint(座標)を設定すると、GameObject は最初の waypoint に向かって移動し、到着すると次の waypoint に向かって移動します。Stops プロパティには waypoint を追加したり、設定した waypoint を削除したり、並べ替えたりできます。Reset Waypoints ボタンをクリックすると、設定した waypoint は初期値に戻ります。

GameObject が一番下の waypoint に到着すると、最初の waypoint に向かって移動します。

他の Movement カテゴリのスクリプトと同じように、Orientation の設定をすると GameObject は移動方向を向いて移動します。

Waypoint を作ると、シーンビューに waypoit を示す gizmo が表示されます。シーンビュー上で waypoint をドラッグして動かすこともできますし、Inspector ウインドウから値を変更して waypoint を動かすこともできます。

シーンビューに表示される青い矢印は、移動する方向を表しています。


Push(キーを押して力を加える)

Push を使うと、指定したキーを押している間、指定した方向に力を加え続けることができます。車やロケットなどを作る時に使えます。次に説明する Rotate と組み合わせて使うと、車のハンドル操作のような挙動を作ることができます。

Axis プロパティでは力を加える方向を指定できます。Y が上方向で、X が右方向です。下や左に移動させたい時は Push Strength プロパティに負の値を指定します。

シーンビューには以下のように緑の矢印の形をした gizmo が表示されます。この矢印は力の方向と大きさを表しています。

Relative Axis をチェックすると、GameObject が回転した時に力を加える方向も GameObject の回転に合わせて回転します。Relative Axis がチェックされていない時は、GameObject が回転しても、力を加える方向は変わりません。つまりチェックされている時は自分を中心とした相対的な方向に力を加えます。チェックされていない時は絶対的な方向に力を加えます。


Rotate(キー操作で回転する)


Wander(うろうろする)

Wander を使うと GameObject をランダムに動き回らせることができます。Speed で動く速さを設定します。これと併せて Rigidbody2D コンポーネントの Linear Drag の値も調整して、ちょうどよい動きをするように設定してください。

Direction Change Interval では方向転換する間隔(単位は秒です)を設定できます。Keep Near Starting Point をチェックしておくと、遠くへ行き過ぎた時にスタート地点の方向に移動して、スタート地点からあまり遠くにいかないようにします。

Speed を大きくし過ぎて Linear Drag を小さくし過ぎると、Keep Near Starting Point をチェックしていても慣性によってスタート地点から遠くへ離れてしまいます。

他の Movement カテゴリのスクリプトと同様に、Orient to Direction にチェックを入れると移動方向を向きます。


2. Gameplay スクリプト

Gameplay カテゴリのスクリプトは、ゲームプレイに効果を与える様々なスクリプトです。これらのスクリプトは Condition スクリプトを使わなくても、単体で動作します。


ObjectCreatorArea(指定範囲にオブジェクト生成)

ObjectCreatorArea オブジェクトをプレハブから生成することができます。オブジェクトを生成する位置(の範囲)は BoxCollider2D を使って範囲を指定することができます。この時、BoxCollider2D の Is Trigger をチェックし、トリガーとしておく必要があります。

Prefab to Spawn プロパティには生成するオブジェクトの元となるプレハブを指定します。シーン上のオブジェクトも指定できますが、プレハブの使い方に慣れるためにプレハブをアサインした方がよいでしょう。シーン上のオブジェクトをアサインすると警告が表示されます。

Spawn Interval プロパティはオブジェクトを生成する間隔(単位: 秒)を指定します。


ObjectShooter(キーを押している間、オブジェクトを発射する)

ObjectShooter を使うと、キーを押してプレハブを飛ばすことができます。BulletAttribute と組み合わせて使うとよいでしょう。

ObjectShooter を empty object に追加して、その GameObject をスプライトの GameObject の子オブジェクトにする、という使い方をすることが多いでしょう。これは、ObjectShooter を追加したオブジェクトを銃口のような「発射位置」にする、ということになります。このやり方だと、「ここから発射する」という場所を正確に設定できます。

Prefab to Spawn プロパティには生成するオブジェクトの元となるプレハブを指定します。シーン上のオブジェクトも指定できますが、プレハブの使い方に慣れるためにプレハブをアサインした方がよいでしょう。シーン上のオブジェクトをアサインすると警告が表示されます。

Create Rate では発射間隔(単位: 秒)を設定できます。Shoot Speed は発射速度を、Shoot Direction では方向をベクトルで指定できます。

Relative To Rotation にチェックを入れると、オブジェクトの回転に合わせて発射する方向も回転します。チェックを入れていない時は、オブジェクトが回転しても発射する方向は変わりません。

このスクリプトを追加すると、緑色の矢印の形をした gizmo がシーンビューに表示されます。

矢印の大きさは発射する力とは関係ありません。

Shoot Speed を 0 にすることで、オブジェクトを足下に置く、という動きをさせることもできます。

Projectile ID

ObjectShooter は発射したオブジェクトに Player の ID を指定することができます。これは BulletAttribute と組み合わせて使います。発射するプレハブに BulletAttribute をアサインしておくと、発射したオブジェクトが他のオブジェクトに衝突した時、その「他のオブジェクト」に DestroyForPointsAttribute を追加しておくと、オブジェクトを発射したプレイヤーに point が入ります。

発射するオブジェクトに正しい ID を付与するためには、ObjectShooter を追加する GameObject のタグを PlayerPlayer2 に設定しておく必要があります。

タグを設定しなかった (untagged) 場合は Player 1 が発射したものとして扱われます。つまり一人プレイの場合はタグを設定する必要はありません。


PickUpAndHold(オブジェクトを持ったり置いたりする)

PickUpAndHold はキャラクターに GameObject を拾ったり、また置いたりする機能を提供します。ConditionArea スクリプトと組み合わせると、アイテムを拾って特定の場所に届けるといったゲームを作ることができます。

オブジェクトを「拾うことができるもの」にするためには、その GameObject に Pickable タグを設定し、どの形でもよいので Collider2D コンポーネントを追加します。Collider を追加する時、Trigger に設定てもよいでしょう。Trigger に設定した方が拾いやすくなります。拾う対象のオブジェクトが Rigidbody2D コンポーネントを持っている場合は、拾った時に Kinematic に設定されます。こうすることで強制的に動きが停止されます。「持つ」という動作をするために、「拾われる」オブジェクトは「拾う」オブジェクトの子オブジェクトになります。

Pickup KeyDrop Key はそれぞれ「拾う」「置く」時に押すキーを指定します。デフォルトでは同じキーが指定されていますが、それぞれ違うキーを指定しても構いません。

Pick Up Distance にはオブジェクトを拾う事ができる距離を指定します。この範囲に複数の「拾える」オブジェクトがある時は、一番近いものを拾います。


TimedSelfDestruct(一定時間後にオブジェクトを消す)

TimedSelfDestruct を使うと、一定時間後にオブジェクトをシーンから消すことができます。Time To Destruction プロパティにはオブジェクトを消すまでの時間(単位: 秒)を設定できます。

発射する弾や、実行後に生成されるオブジェクトに対して TimedSelfDestruct を使って、シーン内にオブジェクトが増えすぎないようにするとよいでしょう。ゲーム内で大量のオブジェクトを生成すると、次官が経つにつれてゲームの動作が遅くなることがあります。そのようなオブジェクトに TimedSelfDestruct を使えば、消すまでの時間が多少長くてもゲームの実行パフォーマンスは上がるでしょう。


3. Playground 属性 (Attribute)


BulletAttribute(当たった相手を破壊)

二人プレイのゲームを作る時に、この BulletAttribute を弾となる GameObject に追加すると、その GameObject はどちらのプレイヤーから発射されたものか識別されるようになります。内部的に playerID という変数で管理されており、Player 1 の playerID は 0, Player 2 の playerID は 1 となります。

この ID は ObjectShooter を使ってオブジェクトが発射された時に自動的に割り当てられます。

playerID を Inspector から割り当てたい場合は、BulletAttribute スクリプトを編集して、変数 playerID から [HideInInspector] 属性を取り除きます。プレハブを ObjectShooter 以外の方法で生成したり発射したりする時にはこのやり方を知っておくとよいでしょう。


CollectableAttribute(取ったら得点)

CollectableAttribute を使うと、GameObject に接触したプレイヤーに得点を与えることができます。CollectableAttribute を使うには、接触判定が必要です。つまり Is Trigger プロパティにチェックを入れた Collider2D と一緒に使う必要があります。

Points Worth には、接触した時に獲得する点数を設定します。別々のオブジェクトに対して異なる点を設定することができます。

ゲームのスコアを画面に表示するには UserInterface プレハブをシーン内に置いておく必要があります。詳しくは ユーザーインターフェイス (UI) を追加する を参照してください。


DestroyforPointsAttribute(破壊で得点)

DestroyforPointsAttribute はシューティングゲームの敵(の GameObject)に追加するとよいでしょう。このスクリプトを追加していると、その GameObject は BulletAttribute を追加されたオブジェクトと衝突した時に消えて、弾を発射したプレイヤーに加点されます。

弾に割り当てられているプレイヤーを識別するための ID については ObjectShooter の説明を参照してください。

ゲームのスコアを画面に表示するには UserInterface プレハブをシーン内に置いておく必要があります。詳しくは ユーザーインターフェイス (UI) を追加する を参照してください。


HealthSystemAttribute(HP 追加)

HealthSystemAttribute はプレイヤーや敵などのオブジェクトに追加して使います。このスクリプトを追加すると、そのオブジェクトはダメージを受けることができます。そして Health が 0 になった時にオブジェクトは削除されます。削除されたオブジェクトがプレイヤーである場合は、ゲームオーバーとなります。

HealthSystemAttribute は後述する ModifyHealthAttribute と組み合わせて使います。ModifyHealthAttribute が追加されたオブジェクトとの当たり判定が検出された時、Health を増減させることができます。

プレイヤーの残り体力を画面に表示するには UserInterface プレハブをシーン内に置いておく必要があります。詳しくは ユーザーインターフェイス (UI) を追加する を参照してください。


ModifyHealthAttribute(HP 増減)

前述の HealthSystemAttribute を追加した「Health を持つ」オブジェクトは、ModifyHealthAttribute を追加したオブジェクトと当たり判定が発生した時に、設定した分だけ Health が増えたり減ったりします。この組み合わせを使うと、「弾」や「入るとダメージを受けるエリア」、「回復アイテム」などを作ることができます。

Destroy When Activated にチェックを入れると、効果を発揮した時にそのオブジェクトは消えます。「弾」や「取ったら回復するアイテム」など「一回だけ効果を発揮する」オブジェクトを作ることができます。

Health Change プロパティは当たり判定が発生した時に Health が増減する値を設定します。負の値を指定すると Health は減り、正の値を指定すると Health は増えます。


ResourceAttribute(アイテムを持つ)

ResourceAttribute は ConsomeResourceAction と一緒に使います。ResourceAttribute を追加したオブジェクトは、取るとインベントリーに追加されて、UI に表示されます。

ResourceAttribute を追加するオブジェクトはスプライトを表示している必要があります。UI に「どのアイテムをいくつ取ったか」を表示する時に、そのスプライトが UI に表示されます。

同じタイプの Resource(アイテム)をいくつも獲っていくと、数字がカウントアップされます。ConsomeResourceAction スクリプトを使うと、アイテムを消費して効果を発揮することができます。

これらの機能を使うと、クラフトシステム(素材を集め、それらを消費してアイテムを獲得する)や「カギを消費してドアを開ける」という仕組みを作ることができます。

Type of Resouce プロパティではアイテムの種類(後述します)を設定できます。Amount を設定すると、獲得した時にリソースがいくつ増えるかを指定できます。Coin や Money に対して設定するとよいでしょう。

アイテムの種類 (Resource Type) を定義する

アイテムの種類は Add/Remove types ボタンをクリックして定義を追加したり消したりできます。これらの定義は実際は InventoryResources という名前の ScriptableObject アセットに定義しています。

ここで + ボタンをクリックするとアイテムの種類 (Resource Type) を追加できます。消したい時は、消したいものを選んで - ボタンをクリックします。

最初からいくつかの Resource Type が登録されていますが、Resource Type は追加したり削除したりできます。Resource Type を追加したら、ResourceAttribute スクリプトの設定で Type of Resource を忘れずに設定しましょう。

定義されている Resource Type は、全てのシーンをまたがって使うことができます。最初から設定されている Resource Type はサンプルのシーンで使われているため、削除するとサンプルのシーンが正しく動かなくなります。また、Resource Type が定義されているアセット(InventoryResources という名前の ScriptableObject アセット)の場所は移動させないでください。正しく機能しなくなります。


コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です