Unityのアドベンチャーゲーム制作アセットAdventure Creator を使って、プレイヤーが操作しないキャラクター、NPCを自動巡回させる方法を試してみました。
シーンの準備
こちらの記事と同じ手順でシーンを用意しました。
ライティングについては、エリアライトと自己発光マテリアルのパラメータを調整。比較するとこんな感じです。自己発光を強くすると間接光の影響が大きくなるのでコントラストが弱くなりますが、今回はこちらの方で進めてみることにしました。
- エリアライト(Intensity: 6)・自己発光(Emission-Brightness: 1)
- エリアライト(Intensity: 4)、自己発光(Emission-Brightness: 3)
ライトプローブの設定
シーンにStaticでないオブジェクトのキャラクターを配置するとこんな風にキャラクターだけが真っ暗になります。
キャラクターにライトが反映されるようにライトプローブを配置しました。[Scene]ビューで見るとこのようになっています。キャラクターの影が床に落ちていなのでちょっと不自然ですが、これでいきましょう。
NPCのセットアップ
今回はNPCのキャラクターのセットアップを新規に行います。使用するキャラクターはUnityの無料アセットのキャラクターから、こちら Space Robot Kyle を使用します。
インポートしたアセットの構成は下記のようになっています。
インポートしたキャラクターオブジェクトのアニメーション設定を変更します。
[Project]ウィンドウ > Assets > Robot Kyle > Model > Robot Kyle を選択。[Inspector]ウィンドウ > [Rig]ボタン > Animation Type [Humanoid]に変更して[Apply]ボタンをクリック。
シーンに配置したキャラクター”Robot Kyle”を選択して[Inspector]ウィンドウ > Animator コンポーネントを確認すると、アバター”Robot KyleAvatar”が追加されてMechanimのキャラクターアニメーションを適用できるようになりました。
NPCをパスに沿って移動させるために必要なキャラクターコンポーネント NPC を追加します。
[Project]ウィンドウ > Assets > Robot Kyle > Model > Robot Kyle を選択してシーンに配置。[Inspector]ウィンドウ > [Add Component]ボタン > Adventure Creater > Charactars > NPC を選択。Animation settings を図のように変更します。
Animator Controller の作成
NPCのアニメーション用に新しいAnimator コンポーネントを作成します。
[Project]ウィンドウ > [Create]ボタン > Animator Controller を選択。ファイル名を”NPC”に変更したらダブルクリックして[Animator]ウィンドウを開きます。
アニメーションファイルはスタンダードアセットのファイルを使用します。メニュー:Assets > Import Package > Characters を選択。インポートができたら[Project]ウィンドウ > Assets > Standard Assets > Characters > ThirdPersonCharacter > Animation > HumanoidWalk を選択。
選択した HumanoidWalk ファイルを[Animator]ウィンドウにドラッグ&ドロップ。自動的にオレンジ色のDefault State に設定されます。
NPCのAnimatorコンポーネント設定
作成したAnimator Controller を NPC に割り当てます。Animator コンポーネント > Appry RootMotion のチェックを外しておきます。これで NPC (Script) コンポーネントのパラメータで移動速度を変更できます。
パスプレハブの作成
メニュー:Adventure Creator > Editors > Game Editor を選択。[Scene]タブ > Scene Prefabs > Navigation > [Path]を選択。
New prefab name: フィールドに”NPC”を入力して[Add new]ボタンをクリック。
パスプレハブの編集
[Hierarchy]ウィンドウに作成したPathプレハブ”NPC”が表示されているので選択。[Inspector] ウィンドウ > Path (Script)コンポーネント > [Add node]ボタンをクリック。下図のようにノードのパラメータが表示されます。ノード座標フィールドの右側にある[+]ボタンをクリックしてノードを追加、合計4つのノードを設定。キャラクターがノード間の移動する方法は Path type: [Is Random] に設定しました。
- 最初のノード(ノードオブジェクトの座標)X -2 / Y 0 / Z -1.5
- Node 1: X -2 / Y 0 / Z 2
- Node 2: X 2 / Y 0 / Z 2
- Node 3: X 2 / Y 0 / Z -1.5
アクションの作成
今回はゲームスタート時からNPCのアニメーションを再生することにしたいと思います。メニュー:Adventure Creator > Editors > Game Editor を選択。[Scene]タブ > Scene Cut Scenes > On start: フィールドの右側にある[Create]ボタンをクリック。アクションリスト OnStart が自動的に追加されます。
アクションリストの編集
[Hierarchy]ウィンドウ > _Cutscenes > OnStart の右側にあるアイコンをクリックして ActionList Editor を開きます。ActionList Editor の最初のノードを編集してキャラクターとパスの設定をします。
動作確認
ゲームを再生するとパスに沿ってキャラクターが自動的に移動するようになっています。
移動速度がちょっと早いようなので調整しましょう。[Hierarchy]ウィンドウ > Robot Kyle を選択。[Inspector]ウィンドウ > NPC (Script)コンポーネント > Movement settings: > Walk speed scale: の値を 1 にしました。
そして、アニメーションの再生速度をわずかに遅くしました。[Project]ウィンドウ > Animator Controllerファイル NPC を選択。[Animator]ウィンドウ > HumanoidWalkノードを選択 > Speed を 0.7 に変更。
それから、キャラクターの足がわずかに床にめり込んでいたのでY座標を調整しました。
WebGLでビルド
ここまでの内容をWebGLでビルドしてみました。(ダウンロードサイズ:約24MB)
こちらの記事で書いたスクリプトを使って、マウス左ドラッグで視点を移動できるようにしました。