今回のテーマは、「3D GameKit LiteのキャラをMMDから変換したキャラに置き換える方法」です。
3D Game KitはUnity公式の出している完成されたチュートリアルアセットです。作り込み過ぎていて初心者向けではないと言われるくらいのチュートリアルアセットなのですが、出来がとてもよいのでキャラを置き換えるだけでも良いできになります。
置き換えるだけでもかなり大変なので心してかかってください。その分、3D GameKit Liteから得られるものは大きいです。
3D GameKit Liteの公式チュートリアルに挑戦していない方は後でも先でもいいので挑戦しておくことをおすすめします。
前準備
アセットストアから3D Game Kit Liteを入手する
アセットストアから「3D Game Kit Lite」を入手してプロジェクトにWindow>PackageManagerからインポートします。
3D Game Kit Liteのテンプレートシーンの読み込み
Kit Tools>Create New Scene… から任意のシーン名称でシーンを作成します。この記事では「new3dscene」としています。
シーンを作成すると必要なオブジェクトがHierarchyに自動で設定されます。
MMDを取り込む
この記事ではMMD→Unity取り込み→VRM変換したものを利用しています。
MMDから取り込んだものでも同じように利用可能です。
MMDからの取り込みは以下の記事を参照
MMDをVRMに変換する方法は以下の記事を参照。
MMD4Mecanim形式、UniVRM形式のそれぞれ対応したアセットをプロジェクトにインポートしてから読み込んでください。
変換したモデルをHierarchyの「—–Characters—–」の下のEllenの下に置きます。このとき、テクスチャの設定がおかしくなる場合は、テクスチャを再度設定し直してください。
向きやポジションが同じになるように、TransformからPosition , Rotation, Scaleを必要に応じて調整します。
Elenのコンポーネントをコピーする
必要になるElenのコンポーネントしてコピー先のキャラクターへ右クリックからコピーアンドペーストします。
必要になるコンポーネントは以下の5つです。
- Character Controller
- Damageable
- Player Input
- Player Controller
- Target Distributor
コンポーネントは1つ1つ右クリックから「Copy Component」でコピーする必要があります。
必要なオブジェクトをコピーする
必要になるElenのオブジェクトをコピー先のキャラクターへ右クリックからコピーアンドペーストします。
必要になるオブジェクトは以下の6つです。
- HeadTarget
- TrailEffect
- Staff
- RepawnParticles
- AudioSources
- PistolRoot
区切りの「———」も合わせてコピーしておくとわかりやすく区切ることができます。
AnimatorコンポーネントをEllenの設定に合わせる
コピー先のキャラクターにコピーしたコンポーネントのAnimatorの設定をインスペクターから以下のように設定します。
- Controller:Ellen
- Update Mode:Animate Physics
※AvatarにはMMDなどからの変換時に生成したAvatarを設定されています。
Player Controllerの設定をコピー先のキャラクターへ変更する
コピー先のキャラクター>Inspector>Player Controller>Referencesを開きます。
コンポーネントをコピーしたままだと、中の設定がEllenのオブジェクトに設定されているので、コピー先のキャラクターに設定を変更します。Hierarchyからドラッグアンドドロップで設定を行います。
- Melee Weapon : Staff
- Footstep Random Audio Player : FootstepSource
- Hurt Random Audio Player : HurtSource
- Landing Random Audio Player : LandingSource
- Emote Landing Player : EmoteLanding
- Emote Death Player : Emoter Death
- Emoter Attack Player : EmoteAttack
- Emote Jump Player : EmoteJump
Staff以外はすべてAudioSourcesに入っています。
シールドエフェクトの作成
シールドエフェクトには、キャラクターのテクスチャ情報をコピーして、シールド用のテクスチャに張り替えたものを利用します。キャラクタのテクスチャ情報は、利用するモデルによって異なっているので、難しい場合は飛ばしてしまってもいいと思います。
さくらみこモデルの場合は、「U_Char_0」,「U_Char_1」で顔以外すべてを網羅しているのでこれをコピーしてシールドのテクスチャに置き換えていきます。
テクスチャ関連のコピー
コピー先のキャラクターに「Create Empty」で空のオブジェクトを作成し、名前を「character_shield」(この記事ではsakuramiko_shield)に変更します。
ここに対象のテクスチャ関連のオブジェクトをコピーして、わかりやすいように「元の名称+_Shield」に名前を変更します。
コピーしたマテリアルに透明マテリアルを適用する
「Assets>3DGamekitLite>Art>Material>Effects>Characters>Ellen」の「Ellen_Shield_Effect_Mat」をコピーしたテクスチャ関連のオブジェクトにドラッグアンドドロップで適応させていきます。
うっすらと青いシールドが見えるようになっていればシールドの完成です。
問題なければcharacter_shieldをの表示をオフにしておきます。
キャラクターのLayerの設定
コピー先のキャラクターのインスペクターから、Layer設定をDefaultからPlayerに変更します。
ダメージ発生時のエフェクト設定
キャラクタへコピーしたコンポーネントのDamageAbleコンポーネントの設定を行います。
Elen_Shieldになっている箇所に、上記で作成した「character_shield」にドラッグアンドドロップします。そして、「No Function」になった箇所をGameObject.SertActiveを選択し、チェックをいれておきます。
Head Targetの位置調整
キャラクターにコピーしたHeadTargetをキャラクターの頭の位置に移動させます。
※カメラがこれを軸に動きます。
Character Controllerの位置とサイズの調整
キャラクターにコピーしたCharacter Controllerの位置やサイズをキャラクターがハマるような位置とサイズに調整します。まず、サイズを「Radius」や「Height」で調整し位置を「Center」で調整するとよいです。
手持ちオブジェクトの位置設定
プレイヤーのプレハブ内から、手の位置にあたるオブジェクトを探します。
これは利用するオブジェクトによって名称や構成が異なるので各自探す必要があります。
さくらみこモデルの場合は、「68.joint_RightThumb0」がそれにあたります。
場所が見つかったらそこに右クリックからCreate Emtpyで空のオブジェクトを作成し、名前を「L_Attach_Point」とします。
この位置に武器がセットされるようになります。
※あとで武器の所持位置を確認しながら調整が必要な場合は位置調整を行ってください。
StaffのFixed Update Followコンポーネントの「To Follow」にこのL_Attach_Pointをドラッグアンドドロップで設定します。
CameraRigの設定
HierarchyからCameraRigを選択し、インスペクターの「Follow」と「Look At」をコピーしたキャラクターとそのHeadTargetにドラッグアンドドロップで設定し直します。
HealthCanvasの設定
HierarchyのHealthCanvasを選択し、Health UIの「Represented Damageable」をコピー先のキャラクターに変更します。
リスポーンエフェクトの無効化
理由はよくわかっていないのですが無効にしないと復活時に暗転してエラーになってしまうので、リスポーンエフェクトを無効にします。
PlayerController.csのEllenSpawnに関連する以下の3行をダブルスラッシュ「//」で無効にします。
EllenSpawn spawn = GetComponentInChildren<EllenSpawn>();
spawn.enabled = true;
spawn.StartEffect();
Modelをhumanoidに変換
「Assets>3DGamekitLite>Art>Models>Characters>Ellen」にあるEllenのAnimationTypeを「humanoid」に変換します。
Rigタブを選択し、AnimationTypeをGenericから「Humanoid」に変更してApplyを押します。
EllenAvatarの左目と右目を無効にする
Ellenのアニメーションをそのまま利用しようとすると、目の作りの関係でモデルによっては白目になる可能性が高いです。
そのため、アバターの目の動作を無効化します。
「Assets>3DGamekitLite>Art>Models>Charcters」からEllenを選択し、「Configure…」をクリックします。
「Head」をクリックしてその中のの「Left Eye」と「Right Eye」を◎をクリックして、Noneを選択します。
一番下のDoneをクリックして反映させます。
AnimationのHumanoidへの変換
EllenのAnimationはすべてGenericになっているのでこれをHumanoidに変換します。
Projectから「Assets>3DGamekitlite>Art>Animations>AnimationClis>Ellen」に移動しCtrl+Aですべてのアニメーションを選択します。
Rigタブを選択し、AnimationTypeをGenericから「Humanoid」に変更してApplyを押します。
※EllenAvatarの横にUpdateとかいている場合はそれをクリックしてからApply
これで設定が完了しました。
アニメーションの設定変更
アニメーションをそのまま適用すると、斜めに進んでいったり微妙にずれてしまったりと分かりづらい不具合が起こります。これらは以下の手順で治すことが可能です。
アニメーションのインスペクターから以下の設定を適用します。
- Root Transform Rotation
Bake Into Pose:チェック有り
Based Upon: Original
※QuickTurnLeftとQuickTurnRightのBased UponはBody Orientationのままにしておく。
- Root Transform Position(Y)
Bake Into Pose:チェックオン
Based Upon:Original
- Root Transform Position(XY)
Bake Into Pose : チェックを外す
「@EllenJump」「@EllenRunFoward」「@EllenWalkForward」などはClipsの項目が複数あるのですべて変更・適用が必要です。
動作確認 アニメーション、エフェクト、リスポーン
再生して動作を確認してみます。
シールドエフェクトの確認と、復活の確認のために、3D Game Kit Liteの「Chomper」と「Acid」を設置しています。
※アニメーションがうまく動作しない場合、一度保存して再起動すると正常に動作することがあります。
ChomperやAcidなど、3D Game Kit Liteの使い方は以下の公式チュートリアルで確認できます。
まとめ
今回、「3D GameKit LiteのキャラをMMDから変換したキャラに置き換える方法」を紹介しました。
- Elenコンポーネントのコピー
- Elenオブジェクトのコピー
- Animatorコンポーネント
- 各種設定の変更
- シールドアエフェクトの作成
- リスポーンエフェクトの無効
- Model、AnimationのHumanoidへの変換
- 敵や毒沼を設置しての動作検証
キャラクターをオリジナルのキャラクターに置き換えることで、ゲーム開発の速度・幅が大きく広がります。
実は、私がはじめて触ったUnityのチュートリアルがこの3D Game Kitでした。当時は意味もわからず試行錯誤して触っていましたが、わからないなりにもそれなりのものができたので当時は楽しかった思い出があります。
難しいだけあって、その作りや考え方は非常に参考になります。
今でもわからないことだらけですが、理解できるようになった部分も多いので今後3D Game Kitを使った記事をかけたら良いなと思います。
今回の記事が、皆さんの助けになると嬉しいです。
もしこの記事が気に入りましたら、ぜひテクリエイトへのブックマーク登録をして頂けると喜びます。
以上、おつかれさまでした!
© Unity Technologies Japan/UCL
モデル:©2016 cover corp. https://3d.nicovideo.jp/works/td74928