Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。コピー2020.04.11今回はBlenderで作成したキャラクターにシェイプキーを使って顔のアニメーションを作成し、それをUnityで使ってみたいと思います。以前にボーンを操作して顔のアニメーションを作成してUnityで使いましたが、MakeHumanキャラをBlenderで顔のアニメを付けてUnityに取り込むMakeHumanでキャラクターの作成とボーンの設定をしてMHX2ファイルで出力し、Blenderに取り込んで表情のアニメーションを付けたらFBXファイルで出力しUnityに取り込んで使用してみます。gametukurikata.com2019.03.18今回はボーンを使ったアニメーションではなく直接メッシュの頂点の位置を動かして作るシェイプキーのアニメーションを使って顔のアニメーションを作成します。シェイプキーで顔のアニメーションを作成する前にキャラクターにモディファイアを取り付けている場合はアーマチュアモディファイア以外のモディファイア(例えばミラーモディファイア)を適用させておいてください。モディファイアが残っているとFBXとしてファイル出力する時にシェイプキーのエクスポートがおかしくなるようです。今回の記事では以下のようにBlenderで作成したシェイプキーを使ったアニメーションがUnityでも使えます。上の例ではAnimatorControllerのレイヤーとアバターマスクを使って顔だけのアニメーションを再生させています。スポンサーリンクBlenderで顔のアニメーションを作成するまずはBlenderのシェイプキーを使ってキャラクターの顔のメッシュを移動させてアニメーションを作成していきます。オブジェクトモードで顔を含むオブジェクトを選択し、オブジェクトデータプロパティのシェイプキーの右の+を押します。するとシェイプキーにベースが追加されます。このベースが元の形状になります。続けてシェイプキーの右の+を押して新しく出来たキー1の名前を変えてBlink(瞬き)とします。Nキーを押してサイドバーを表示し、ツールのミラーのXを有効にします。Blinkを選択した状態でTabキーを押して編集モードにし、目を閉じるように頂点を選択して移動させます。瞼にあたる部分の頂点を選択し、目を閉じるように下に移動させます(ミラーのXを有効にしたので片方の頂点を移動すると反対側も同じように動きます)。完全に目を閉じるように移動させます。シェイプキーを使う時は頂点の数は変更せず位置だけを変更するようにします。ここまで出来たら瞬きのアニメーションを作成していきます。Tabキーを押してオブジェクトモードに戻ります。タイムラインの1フレーム目に移動します。オブジェクトデータプロパティのシェイプキーのBlinkを選択し、値を0にし、その値の上でキーボードのIキーを押してキーフレームを打ちます。次にタイムラインの5フレームに移動させ、オブジェクトデータプロパティのシェイプキーのBlinkを選択し、値を1にした状態でキーボードのIキーを押してキーフレームを打ちます。10フレーム目に移動し、シェイプキーのBlinkを選択し、値を0にした状態でIキーを押してキーフレームを打ちます。これで1フレームから10フレームまでで瞬きをするアニメーションが出来ました。シェイプキーアニメーションがうまく出力されない!これで瞬きのアニメーションが出来ましたが、このままシェイプキーのアニメーションだけを出力しようとしてもUnityで反映されなかったので、適当にボーンを動かして体のアニメーションも作成します。タイムラインの1フレーム目に移動し、ポーズモードにしたら左手のIKを選択しIキーを押して位置/回転をキーフレームに打ちます。10フレーム目に移動し、左手のIKを選択し適当に移動させてIキーを押し、位置/回転をキーフレームに打ちます。通常のアニメーションとシェイプキーを組み合わせる場合はボーンで作成するアニメーションをちゃんと作ってください。今回は顔のアニメーションしか使わないので胴体は適当に動かしました。FBXファイル出力Blenderのファイルメニューからエクスポート→FBXを選択します。オブジェクトタイプをアーマチュアとメッシュのみShiftキーを押しながら選択します。スケールを適用ではすべてFBXにし、出力します。Assetを選択し出力したFBXファイルを取り込みます。BlendShapesにチェックが入っているのを確認します(デフォルトで入っているはず)。TypeをHumanoidにしApplyボタンを押します。Animationタブを選択し、取り込んだアニメーションが正常に動作するか確認します。Timeにチェックを入れApplyを押します。以下のように瞬きと手の動きがUnityでも再生されているのを確認します。ここで複数のいらないアニメーションが取り込まれてしまった場合はそのアニメーションを選択し、-を押してそのクリップを削除します。わたくしの場合はうまい具合にひとつのアニメーションだけが取り込まれたので削除はしませんでした。顔のアニメーションだけを使う今回使用するのは顔のアニメーションだけなのでアバターマスクとAnimatorControllerのレイヤーを使って顔のアニメーションだけを上書きする事にします。Maskを選択し、名前をHeadAvatarMaskとし、インスペクタで頭だけを緑色にして有効にします。LayerでIdle状態とWalk状態を作りアニメーションパラメータ―Speedの値によってアニメーションを切り替えているとします。新たにレイヤーを作成し、名前をHeadとします。Layerと同期し同じ状態と遷移が表示されるようにします。HeadレイヤーはHeadAvatarMaskを設定したので顔のアニメーションだけが再生されます。Layerのアニメーションを上書きします。HeadのIdle状態を選択し、インスペクタに先ほど取り込んだキャラクターのアニメーションクリップを設定します。HeadのWalkには何も設定しません。これで機能が出来ました。キャラクターが立ち止まっている時は瞬きをしますが、歩いている時は瞬きをしないようになりました。RendererのBlendShapes項目に表示されるようになります。わたくしの場合は瞬き(Blink)の他に口を開ける(MouseOpen)も作ったので上のように二つのシェイプキーが表示されます。スクリプトからシェイプキーの値を操作するとAnimatorControllerに顔用のレイヤーを作ったりアバターマスクを作って設定しなくても出来ます。その分スクリプト側でシェイプキーの値を操作する必要があります。新しくShapeKeyOperationsスクリプトを作成し、キャラクターに取り付けます。blinkCount);}}Startメソッドでキャラクターの子要素のシェイプキーで操作しているメッシュのSkinnedMeshRendererコンポーネントを取得し、それぞれのシェイプキーを0(ベースの状態)に設定しています。UpdateメソッドではMathf.Sinで‐1~1の値を取得し、それをMathf.Clamp01で0~1の間に調整し、それに100をかけて0~100の間の値を作っています。Blenderのシェイプキーの値がUnityでは0~100の間で対応されます。シェイプキーのBlinkの値にこの0~100の値を入れる事で定期的に瞬きをするようにしています。実行すると以下のようにスクリプトで瞬きをするようになりました。スクリプトの場合はアニメーションの状態を考慮していないのでどの状態でも一定間隔で瞬きをします。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事BlenderBlenderのアドオンMakeClothesを使ってジャケットと帽子を作成するBlenderのアドオンMakeClothesを使ってジャケットと帽子を作成しMakeHumanで使用出来るようにします。BlenderBlenderからアニメーションだけ出力しUnityのキャラと関連付けをするUnityに取り込んだキャラクターのアニメーションを追加する為にBlenderからアニメーションだけ出力しUnityのキャラと関連付けをしていきたいと思います。Blenderblender2.76bにmakehumanデータの取り込みとUnityへのインポート2MakeHumanで作成したキャラクターをBlenderに取り込み、ボーンを設定しリグを取りつけます。Unityで使うアニメーションを作成する時に便利ですBlenderMakeHuman1.1.1で作ったキャラクターをUnity2017とBlender2.78で使うMakeHuman1.1.1で作ったキャラクターをUnity2017にそのまま取り込んだりRigifyを取り付けてBlender2.78に取り込みそのキャラクターをUnityに取り込んでみます。BlenderMakeHumanキャラをBlenderで顔のアニメを付けてUnityに取り込むMakeHumanでキャラクターの作成とボーンの設定をしてMHX2ファイルで出力し、Blenderに取り込んで表情のアニメーションを付けたらFBXファイルで出力しUnityに取り込んで使用してみます。BlenderBlender2.76bにMakeHumanデータの取り込みとUnityへのインポート1人型キャラクター作成ソフトMakeHumanで作成したキャラクターを3DCG作成ソフトBlenderへの取り込み方と出力、それからUnityへと取り込む方法UnityのCharacterControllerの進化版のOpenCharacterControllerを使ってみるUnityで毎フレーム実行している処理の回数を減らすホームBlenderスポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。