みなさんこんにちは!UnityやUnreal Engineを勉強しながらゲームつくるマンです。
ゲーム開発ツールのUnityを少しづつ勉強中。Unityのアセットストアで購入したアドベンチャーゲーム制作アセットAdventure Creatorの公式サイトに掲載されている英語のチュートリアルを翻訳しながら進めていきたいと思います。今回はボタンを押してドアを開ける仕掛けについて勉強します。
原文:Pressing a button to open a door
今回のチュートリアルを進めるために、Unityの標準オブジェクトであるCubeとCapsuleを使って、壁、床、ドアの横にあるボタンで構成されているシンプルなシーンを用意します。
というわけで、まずはシーンの準備。メニュー:File > New Sceneを選択して新規シーンの作成。次に[AC Game Editor]ウィンドウ > [Scene]タブ:Scene manager > Basic structure > Organise objects: > [With folders]ボタンをクリック。これでシーンに必要な階層ファイルを準備できました。
次に[Hierarchy]ウィンドウ > Create > 3D Object > Planeを選択。シーンの配置位置が原点に無い場合は、[Inspector]ウィンドウ > Transformコンポーネントの歯車アイコンをクリック > Resetを選択して値をリセットしておきましょう。 名前を”Floor”に変更。Planeはデフォルトサイズ一辺10mなので変更しなくていいでしょう。
次に[Hierarchy]ウィンドウ > Create > 3D Object > Cubeを選択。3つのCubeを組み合わせて壁を作りました。さらにCubeオブジェクトを追加してドアオブジェクトを配置。それぞれマテリアルを作成して色分けしました。
ドアを開けるボタンと台座を作りましょう。[Hierarchy]ウィンドウ > Create > 3D Object > Capsuleを選択。サイズ調整してドアの左手前に配置。Cubeオブジェクトを追加してボタンパーツを配置します。
最後に作成した部屋のオブジェクトをすべて選択して[Hierarchy]ウィンドウ > _SetGeometryにドラッグ&ドロップで階層を移動しておきます。ゲーム開始時のプレイヤースタート位置のプレハブがドアの位置と重なっているので修正。[Hierarchy]ウィンドウ > _Navigation > _PlayerStarts > PlayerStartを選択。ドアの手前に移動します。
プレーヤーが壁やドアの向こう側をクリックできないように、これらのオブジェクトはDefaultレイヤーに配置され、他のレイヤーはIgnore Raycastレイヤーに配置されています。
このシーンはデフォルトのGameCamera、PlayerStart、NavMeshで構成されているので、このチュートリアルではインタラクションだけに焦点を当てることができます。シーンの設定の詳細については、こちらのチュートリアルをお読みください。
台座のボタンをクリック可能にして、追加のアニメーションを必要とせずにドアを開くようにします。
[AC Game Editor] > [Scene]タブ:Scene Manager > Scene prefab > [Hotspot]ボタンをクリックして新しいHotspotプレハブを作成します。Hotspotは、シーンの中央に黄色のキューブとして表示されます。表示されていない場合は、[Inspector]ウィンドウ > ホットスポットスクリプトコンポーネントが展開されていることを確認します。
Hotspotをボタンの上に置き、名前をRed buttonに変更します。Hotspotの立方体はカーソルでクリックするとアクティブになる領域を表します。
Hotspot自体はゲーム内には表示されませんが、マウスオーバーするとメッシュレンダラーでゲームオブジェクトを強調表示できます。このHotspotでは、ボタンオブジェクトのメッシュを強調表示します。ボタンとして機能するキューブメッシュを見つけ、Highlightスクリプトを追加します。
ボタンオブジェクトを選択、[Inspector]ウィンドウ > [Add Componet]ボタン > Adventure Creator > Hotspots > Hilighterを選択。
Red buttonのホットスポットインスペクタに戻って、このメッシュオブジェクトをObject to highlightフィールドに割り当てます。
ゲームを再生してHotspotの上にマウスカーソルを重ねると、ボタンの赤い立方体が光ります。
私たちは何か他のことが起こる前にプレイヤーがHotspotに近づくようにしたいので、歩行する正確な位置を定義するためにMarkerを置く必要があります。[AC Gema Editor] > [Scene]タブ:Scene
manager > Scene prefabs > Navigation > [Marker]ボタンをクリック、Markerプレハブを作成します。
Markerは、[Scene]ビューで緑の矢印で表されます。このプレハブの名前をButtonMarkerに変更し、それをボタンの方に向けて手前に配置します。
我々はこれがMarkerであることをHotspotに伝えることができます。Character: Move to pointをインタラクションの一部として単に使用することもできますが、Hotspotレベルでマーカーを設定すると、複数のインタラクションがある場合、操作が簡単になります。
Hotspot”Red button”を選択。[Inspector]ウィンドウ > Hotspot (Script)コンポーネント > Walk-to markerフィールドにMarker”ButtonMarker”をドラッグ&ドロップで割り当てます。
これで、インタラクションを作成する準備が整いました。インタラクションとは、Hotspotをクリックしたときに何をすべきかをAdventure Creatorに伝える一連の指示です。この簡単な例では、簡単な”Use” の対話を作成します。
Hotspotオブジェクト”Red button”を選択して[Inspector]ウィンドウ > Hotspot (Script)コンポーネント > Use Interactionパネル右側の「+」アイコンをクリックします。
ボタンを押す前にプレイヤーがボタンの方に移動するように、Use Interaction > Player actionフィールドをWalk to Markerに変更します。追加のオプションが表示されたら、Face after movingにチェックを入れます。Cutscene while movingにチェックを外しておけば、プレイヤーがMarkerに向かって移動中にクリックするとキャンセルできます。
ここまでの内容をゲームを再生して確認しましょう。WebGLでビルドしてみました。台座オブジェクトを2つ追加してPlayerキャラクターを3人称視点に設定しました。
[Tab]キーで視点操作のオン/オフ、[W][A][S][D]キーで移動、[SPACE]キーでジャンプできます。
台座をクリックするとキャラクターが自動的にそちらに向かって移動します。
HotspotオブジェクトとMarkerオブジェクトを連携させてPlayerキャラクターをMarkerオブジェクトの位置に自動的に移動させる仕組みができました。次回Part2ではドアを開けるアクション設定を見ていきましょう。