Unityのアドベンチャーゲーム制作アセットAdventure Creator を使って、マウスクリックでクローズアップ表示したアイテムをマウスドラッグで回転する処理を試してみたいと思います。
マウスクリックでクローズアップ表示したオブジェクトをマウスドラッグで回転する
こちらの記事でマウスクリックしたアイテムオブジェクトをクローズアップ表示して背景をぼかす方法を行いました。
今回は情報を整理するために、クローズアップ表示したアイテムをマウスドラッグで回転する方法の部分だけに限定して手順を確認したいと思います。
Game Managerセットとシーン階層の作成
Adventure CreatorのNew Game Wizardで新しいマネージャーセットとシーン階層を作成。メニュー:Adventure Creator > Getting standard > New Game Wizardを選択。Playerは 一人称視点、操作方法はFirst
Person にしました。
テストシーンのライティング設定
先に今回のシーン内容に合わせてライティングの設定を変更しておきます。
メニュー:Window > Lighting > Settings を選択。[Lighting]パネルが表示されたらEnvironment > Skyboxはなしに変更。Realtime > Realtime Global Illuminationのチェックは外しておきます。
それから、Lightmappng Settings > Ambient Occlusion にチェックをいれて、Directional Mode を Non-Directional に変更しておきます。
テストシーンのオブジェクト作成
そして部屋のオブジェクトをシーンに配置します。基本形状を組み合わせて幅と奥行きが6m、高さ3mの部屋を作りました。部屋の中央にCubeオブジェクトを使ってアイテムを置くステージを配置。天井のライトも基本形状を使って配置。自己発光マテリアルを設定しています。
オブジェクトはすべて[Inspector]ウィンドウのオブジェクト名右側にある”Static”にチェックを入れてライトマッピングを有効しています。
テクスチャ素材はUnityのアセットストアの無料テクスチャYughues Free Architectural Materials を使用しています。
天井のライト形状に合わせたArea Lightを配置。Light Probeも追加しておきましょう。シーンに最初から配置されているDirectional Lightは不要なので削除。[Scene]ビューでみるとこんな感じです。
Playerプレハブの作成
一人称視点のPlayerプレハブを作成します。こちらの記事の手順に沿って作成しました。一部コンポーネントの内容を調整して下図のようになりました。(画像拡大)
アイテムオブジェクトのプレハブをシーンに配置
一通りシーンの準備ができたので、アイテムオブジェクトを用意します。今回はUnityの無料アセットからSurvival Kit Lite を使用します。
アセットの中にある8個のアイテムから今回は”Flashlight”を使用することにしました。
シーンに配置したアイテムのプレハブ(インスタンス)にBox Collider コンポーネントを追加。さらに、[Inspector]ウィンドウ > [Add Component]ボタン > Adventure Creater > Hotspots > Hotspot コンポーネントを追加します。Box Collider コンポーネントは追加すると自動的にサイズ調整されますが、クリックし易いように少し大きく調整しました。
クローズアップ表示用のアイテムオブジェクトを作成
シーンに配置したアイテムの編集を続ける前に、先にクローズアップ表示用のプレハブを作成します。
シーンに配置したアイテムのプレハブ(インスタンス)を[Project]ウィンドウにドラッグして新しいプレハブを作成します。名前を”Examine Flashlight”に変更しておきます。
シーンに配置したアイテムオブジェクトを分解
シーンに配置したアイテムの編集に戻りましょう。まずはアイテムのプレハブ(インスタンス)を分解します。
[Hierarchy]ウィンドウ > Flashlight を選択。[Inspector]ウィンドウ > Hotspot (Script) コンポーネントの右側にある歯車アイコン > Move Up を選択。”Break Prefab Instance”ダイアログが表示されたら[Continue]ボタンをクリック。これでシーンに配置したアイテムのプレハブ(インスタンス)が分解できたので、独立したオブジェクトとして編集を進めていきます。
シーンに配置したインスタンスから新しいプレハブを作成すると、自動的に同じConstant ID number が割り当てられます。それをクローズアップ用のオブジェクトとしてHotspotのアクションで割り当てると同じオブジェクトとして動作します。別々の動作、コンポーネントを割り当てたいので分解しました。
アイテムのHotspotに新しいActionListを追加
シーンに配置したアイテムにの Hotspot コンポーネントの Use Interaction にアクションを追加します。
[Add Component] > Adventure Creator > Hotspot を選択。作成された Hotspot (Script) コンポーネント >[Use Interactions]パネルの[+]ボタンをクリック > Interactions: > [Create]ボタンをクリック。
[Use Interactions]パネル > Interaction: フィールドにActionList名”Flashlight: Use (Interaction)”が表示されます。右側にあるアイコンをクリックするとActionListエディターが開きます。
ActionListを編集
ActionListエディターにノードを作成しましょう。アクションの流れは次の通りです。
- シーンのアイテムオブジェクトを非表示
- シーンのHotspotを無効化
- クローズアップ表示アイテムを追加(カメラの位置に)
- クローズアップ表示アイテムオブジェクトの階層をカメラの子供にセット
- Playerの移動と視点回転を無効化
- マウス右クリックのチェック(次のノードまたはノードのループ)
- (マウス右クリックで)シーンのアイテムオブジェクトを表示
- シーンのアイテムオブジェクトのHotspotを有効化
- クローズアップ表示アイテムオブジェクトをシーンから削除
- Playerの移動と視点回転を有効化
ActionListの全体図はこのようになります。(図を拡大)
クローズアップ表示用オブジェクトの編集
[Project]ウィンドウにあるプレハブ”Examine Flashlight”から不要なコンポーネントを削除。Hotspot コンポーネントと Box Collider コンポーネントを削除します。次にマウスドラッグ操作をするためコンポーネントを追加。[Add Component]ボタン > Physic > Sphereを選択します。Radiusの値はオブジェクトのサイズに自動的に調整されます。
次に[Add Component]ボタン > Scripts > AC > Moveable_Dragを選択。Moveable_Drag コンポーネントを追加すると自動的にRigidbody コンポーネントが追加されます。Use Gravity のチェックを外します。
Moveable_Drag コンポーネントの設定はDrag mode: [Rorate Only]に変更、Disable gravity when held? のチェックを外しておきます。
動作確認とオブジェクトの調整
一通り設定ができたのでゲームを再生してみましょう。懐中電灯をクリックすると非表示になりますが、クローズアップ表示のオブジェクトが見当たりません。どうやらプレハブ”Examine Flashlight”の座標を調整していませんでした。
Playerの Capsule コライダーとアイテムのSphere コライダーが接触しないで、カメラの正面に表示されるように Transform > Position の値をX: 0 / Y: 0 / Z: 0.8 に調整しました。ゲームを再生してクローズアップ表示中の状態を[Scene]ビューで右側から見るとこのようになっています。
Interactionオブジェクトの設定
もう一度ゲームを再生すると、アイテムがクローズアップ表示されますが、マウスドラッグで回転することができません。これはHotspotのアクションが実行されるとゲームが一時停止するためです。
[Hierarchy]ウィンドウ > _Interactions > Flashlight: Use を選択。[Inspector]ウィンドウ > Interaction (Script) コンポーネント > Interaction Properties > When running: [Run in Background] に変更します。WebGLビルド
今回の作成したシーンをWebGLでビルドしてみました。画像クリックするとダウンロード再生できます。(ファイルサイズ:約27MB)
Wキー前進、Aキー左移動、Sキー後退、Dキー右移動。
右クリッククローズアップ表示終了。Tabキー視点操作切り替え。