【補足解説付き】Unity公式チュートリアル日本語翻訳【Roll-a-ball tutorial - 5. Creating Collectable Objects】
今回のチュートリアルでは、Player ゲームオブジェクトが集めるゲームオブジェクトを作成します。
Cube ゲームオブジェクトを作成して PickUp に名前を変更します。Transform コンポーネントを RESET して原点に合わせます。
Scene ビューカメラのフォーカスを PickUp ゲームオブジェクトに合わせます。
Player ゲームオブジェクトと PickUp オブジェクトが同じ場所にあり見辛いです。
Hierarchy ビューから Player を選択し現れる Inspector ビューの最上部に表示されている Player という名前の横にあるチェックボックスをオフにします。
これはゲームオブジェクトのアクティブチェックボックスです。チェックを解除すると Scene 内のゲームオブジェクトが無効になります。これにより、新しい Pickup ゲームオブジェクトのための明確な作業スペースが得られます。
Cube は、私たちがこのプロジェクトを開始したときに作成した Player と同じように、地面に埋もれています。Cube もまた、1×1x1 の規則的な形なので、半分持ち上げると Ground に綺麗に乗っている状態になることを我々は知っています。
この Cube は私たちが拾い集めるオブジェクトになります。効果的であるためには、プレーヤーの注目を集める必要があります。だから、キューブをより魅力的にしましょう。
まず Cube を小さくします。これにより、プレイエリアの上に浮かぶ効果も与えられます。両方とも、このオブジェクトを特別なものとして識別するのに役立ちます。
まだ充分ではありません。
今度は傾けてみましょう。Cube を45°、45°、45°の角度で回転します。
良くなってきましたが、まだセクシーではありません。
プレーヤーの注意を引き付けるために必要なもの、それは動きです。Cube を回転させましょう。これを行うには、スクリプトが必要です。PickUp オブジェクトを選択した状態で、Inspector の Add Component ボタンをクリックします。
Rotator という名前の新しいスクリプトを作成し、Project ビューで Scripts フォルダに移動して整理します。
編集のためにスクリプトを開きます。このスクリプトで Cube を回転させます。まずは必要のないサンプルコードを削除しましょう。ここでは物理法則を使用しないので、FixedUpdate ではなく Update を使うことができます。
現在 PickUp オブジェクトの Transform コンポーネントの Rotation の X軸、Y軸、Z軸 を(45, 45, 45)に設定しています。しかしこれらの値は PickUp オブジェクト自身で自動で変わりはしません。私たちはこれらの値をフレームごとに更新したいです。私たちが直接 Transform の Rotation を入力する必要なく回転させたいです。
下記リンクの Transform についてのマニュアルを確認します。
Unity - Scripting API: Transform
Transform には主要な2つの効果があります。
Transrate と Rotate です。
Translate 関数は Transform を使ってゲームオブジェクトを移動します。
Rotate 関数は Transform を使ってゲームオブジェクトを回転します。
今回は Rotate 関数を使用します。Rotate 関数にリンクをクリックして詳細を確認します。
Rotate 関数には2通りの記述方法があります。
一方は Vector3 を使用し、もう一方は X, Y, Z の値を使用し、どちらの記述方法でもオプション引数として Space を持っています。このレッスンでは方向のためにデフォルトである Vector3 を使用する最も簡単な記述を採用します。
私たちのコードに戻りましょう。
予測変換後、transform が小文字の t で始まるように書かれていることを確認したら、Rotate(new Vector3(15、30、45))と書いてください。
この動きは滑らかでフレームレートに依存しないことも必要です。したがって、vector3 の値に Time.deltaTime を掛ける必要があります。Time.deltaTime で取得できる値は、最後のフレームを完了するのに要した秒数です。
このスクリプトを保存してUnityに戻ります。
プレイモードを再生して PickUp が回転していることを確認して、プレイモードを終了します。
さて、Pickup オブジェクトが動作し始めました。次に、これらをゲームエリアの周りに配置します。しかし、これを行う前に、重要な一歩を踏み出す必要があります。Pickup オブジェクトをプレハブにする必要があります。
プレハブとは、テンプレートまたは、ゲームオブジェクト、親子関係を持つゲームオブジェクトファミリの青写真を含むアセットです。
既存のゲームオブジェクトまたはゲームオブジェクトファミリからプレハブを作成したら、このプレハブを現在のプロジェクトのどのシーンでも使用できます。
Pickup オブジェクトのプレハブを使用すると、シーン内の単一のインスタンスまたはプレハブアセット自体に変更を加えることができ、ゲーム内のすべての Pickup オブジェクトがこれらの変更で更新されます。
最初にプレハブを保持するフォルダを作成しましょう。
私たちはこのフォルダを Scripts フォルダなどと同格に Assets 直下に配置したいと考えています。Project ビューを選択します。もし他の項目やフォルダが選択中になっていて強調表示されている場合は、Project ビューの枠内の何もないスペースをクリックして解除します。Create > Folder を選択し、フォルダの名前は Prefabs に変更します。
PickUp ゲームオブジェクトを Hierarchy ビューか Project ビューにドラッグして Prefabs フォルダに置きます。
アイテムを Hierarchy から Project ビューにドラッグすると、テンプレート、またはゲームオブジェクトまたはゲームオブジェクトファミリの青写真を含む新しいプレハブアセットが作成されます。
ゲームエリアの周りに拾い集めるためのオブジェクトを散らす前に、PickUp をまとめて保持し、Hierarchy を整理するのに役立つ新しいゲームオブジェクトを作成する必要があります。新しいゲームオブジェクトを作成し、Pickups と名付けます。
この親ゲームオブジェクトの位置が原点であることを確認し、Pickup ゲームオブジェクトをドラッグして子にします。
ここで、プレイエリアの周りにいくつかの PickUp オブジェクトを広げたいと考えています。まず、親ではなく PickUp ゲームオブジェクトが選択されていることを確認します。
次に、シーンビューの右上にある Gizmo のY軸をクリックして、真上から見下ろすトップダウンビューに移動しましょう。
ゲームエリア全体を見ることができるように少しバックしてみましょう。マウスでスクロールすることでバックが可能です。
PickUp ゲームオブジェクトをつかんで動かすと、望むようにはシーン内を移動しません。Cube が傾いているギズモに対してどのように動いているのか注意してください。私たちが見ているのは、Local モードで移動するゲームオブジェクトです。実際にPickUp ゲームオブジェクトを地面に合わせて移動したいと考えています。
Unity エディタのモードを Global に変更します。
Gizmo の方向が Global と Local のときどのように変化するかを見てみましょう。 Global にすると、私たちのゲームオブジェクトを世界のグローバル軸を基準にしてドラッグすることができます。
それではゲームのエリアに PickUp ゲームオブジェクトをいくつか置いてみましょう。
私たちの最初に作成した PickUp オブジェクトを掴んで、ゲームエリア内の都合のいい位置に置いてください。私は一番上に私の PickUp オブジェクトを置くつもりです。
PickUp オブジェクトを選択した状態で、Duplicate(複製)します。これは上部メニューバーから Edit > Duplicate を選択するか、ショートカットキー(Mac なら command-D. PC ならcontrol-D)を使用して複製します。複製した2つめの PickUp オブジェクトも適当な場所に移動します。
ショートカットキーでさらにいくつか作成しプレイエリアに配置します。
ギズモの中央でX / Z平面を選択することによって、地面またはX / Z平面に平行に移動していることに注意してください。
全部で12個になったらもう充分でしょう。ゲームを再生してみてください。全ての PickUp ゲームオブジェクトがちゃんと回転していますね。
私が PickUp オブジェクトたちに望むことは、背景の壁や Player ゲームオブジェクトよりもはるかに目立つことです。色を変えましょう。これを行うには別の素材が必要です。
簡単にするために、既存の素材を選択して複製するだけです。複製された新しいマテリアルには PickUp と名付けます。
Project ビューでマテリアルを選択して、Albedo カラープロパティを黄色に変更します。プレハブの素材を変更することで、プレハブの色を変えることができます。これを行うには2通りの方法があります。
インスタント化されたプレハブの1つだけを変更してから Apply ボタンをクリックすると、変更が同じプレハブから作成された全てに適用されます。Apply ボタンをクリックしなければこの単一のインスタンスの素材だけを変更することになります。
もう1つの方法は、おそらくよりシンプルですが、プレファブアセットの素材を直接変更するだけです。
再生してテストしましょう。良くなりましたね。
次の課題では、PickUp オブジェクトたちを拾い上げて数える方法を学びます。