MEBIUSTOSのブログスマートフォン用の表示で見るMEBIUSTOSのブログ主にUnityに関する技術的な事を書いていきます。@xflutexxこの広告は、90日以上更新していないブログに表示しています。DK2を被っても快適な季節になってきたので、Oculusについて。頭の高さを操作したいまぁ、色々とあると思うんですよ。片手で頭の高さを操作したいシチュエーション。ソファに座ってシャム猫を撫でつつも仮想世界でパンツ覗きたい時とか。本来であれば、床に頭をこすりつけ無様な格好で覗くのが正しいVR作法な気もしますが......。ほらあれですよ!小人になったシチュエーションとかにも使えるじゃないですか!!(適当)コードこのコードをOVRPlayerControllerにアタッチすればオッケーです。UnityOculusUtilities_0_1_0_betaで動作確認しています。仕組みはTrackingSpaceのローカルポジションを弄っているだけです。MMD4MecanimFaciemMMDモデルの表情制御アセット「MMD4MecanimFaciem」関連をアップデートしました。Wireframe」ボタンを追加。押すとシーンビューにて選択モデルに表示されるメッシュのワイヤーフレームが非表示化されます。File」ボタンを追加。ボタンで表情Weight値がプロパティとして設定されたAnimationClipを作成できます。Clip)ファイルを作成する方法です。はじめに先日公開したブレンドシェイプ値をアニメーションクリップとしてファイルに吐き出すコレ。当初は複数のスキンメッシュに分散したブレンドシェイプを一箇所で操作したい!と、いうのが目的だったのですが、頑張ったらアニメーションクリップファイルを作成するまで出来てしまったので、その方法を記載しておきます。余談ですが、後でMMD4MecanimFaciemForMecanim(MMD4Mecanimモデルの表情をメカニムで制御するツール)にもクリップ作成機能を搭載しようかと考え中。空のアニメーションクリップファイルを作るだけなら簡単です。);AssetDatabase.SaveAssets();AssetDatabase.Refresh();うん。CreateAssetで作成して、SaveAssetsで保存して、Refreshで念のためアセットデータベースをリフレッシュ。空のアニメーションクリップを作成しても何も嬉しくないので、プロパティを追加してみます。以下に示すコードはブレンドシェイプ「あ」のWeight値をプロパティとして設定したアニメーションクリップを作成するソースコードです。);AssetDatabase.SaveAssets();AssetDatabase.Refresh();流れは下記のとおりです。EditorCurveBindingで、どのプロパティを操作するのかの指定。AnimationCurveで、キーフレームとプロパティ値の指定。AnimationUtility.SetEditorCurveで、アニメーションクリップにEditorCurveBindingとAnimationCurveを設定。EditorCurveBinding操作するプロパティを特定するため、3つのパラメータを指定します。path操作対象となるオブジェクトの名前を相対パスで指定します。ルートの場合は""になります。先のソースコードではルートとなるオブジェクトの一階層下にある"SkinnedMeshObject"という名前のゲームオブジェクトを指定しています。"SkinnedMeshObject";別例として、以下のような階層構造をもつオブジェクトにおいてBオブジェクトを指定したい場合は次のようになります。type操作するコンポーネントタイプを指定します。先のソースコードではブレンドシェイプを操作するためSkinnedMeshRendererを指定しています。propertyName操作するプロパティを指定します。ブレンドシェイプ名で指定します。(これを調べるのに紆余曲折あったのですが、それについては後ほど。)先のソースコードではブレンドシェイプ「あ」を指定しています。"blendShape.あ";AnimationCurveキーフレーム時間と、プロパティの値を設定します。value)という感じで、第一引数にキーフレームの時間を、第二引数にプロパティの値を指定します。先のソースコードではキーフレーム0秒、ブレンドシェイプのWeight値に12.3fを設定しています。12.3f);propertyNameに設定すべき値が分からなかった当初、EditorCurveBindingのpropertyNameに対し、どのような形式で対象のブレンドシェイプを設定するのかが分かりませんでした。(PDF)のP44-P49に、スプライトアニメーションを作成する場合におけるpropertyNameに設定すべき名前の調べ方がありました。そこで、ブレンドシェイプについても同様の方法にて調べてみたところ、SkinnedMeshRenderer内のm_BlendShapeWeights.Array.data[0]というパスに辿り着いたので、「これか!」と思い意気揚々とpropertyNameに設定してみたんですが、残念ながら動きませんでした。悩んだ結果、正しく設定されたアニメーションクリップのpropertyNameがどうなっているのか調べるのが手っ取り早い!という結論に至り、アニメーションクリップ内のpropertyNameをDebugLogに出力するツールを作成しました。ブレンドシェイプ名だった。pathの謎EditorCurveBindingのpathはルートオブジェクトからの相対パスをゲームオブジェクトの名前で表すわけですが......。「ゲームオブジェクトの名前って同じ場合あるよね?」という疑問。同じ名前のオブジェクトがあった場合どうやって指定するんだろう......。現状困ってないので記憶の隅に追いやる。ツール公開中ブレンドシェイプ値を元にAnimationClipを作成するツールが出来ました。現在のブレンドシェイプ値を元にAnimationClipファイルを作成します。複数のSkinnedMeshに分散されたブレンドシェイプを一箇所で操作できます。対象となるモデル等にBlendShapeEditHelperスクリプトをアタッチして使用してください。Clipボタンを押すと現在の全プレンドシェイプ値をAnimationClipファイルとして保存します。保存場所はAssets直下になります。Wireframeボタンでワイヤーフレームが消えるので表情を編集しやすくなります。コンポーネントのコンテキストメニューからタブ表示とリスト表示を切替える事が出来ます。Clipボタンを押すと、Assets直下に作成されます。Clip」となります。同一名のAnimationClipが既に存在する場合は、末尾に数字が付きます。AnimationClipの利用方法Animatorにて表情の変更等に利用できます。ユニティちゃんアセットに付属されているシーン"ActionCheck"のAnimatorとFaceUpdateスクリプトが参考になると思います。ユニティちゃん本記事の説明にてユニティちゃんアセットを使用させて頂きました。エディタ拡張シーンビューにおいて特定のギズモの表示をオン・オフするエディタ拡張例です。指定したギズモのみを操作する例がネット上で見つからず、かつ自分で必要になったので作りました。下記の例では実行する度にCapsuleColliderのオン・オフをトグル操作しています。}}下記のUnityDecompiledソースがとても役に立ちました。UnityTweet広告を非表示にするもっと読むコメントを書く2015-09-06【アップデート】HeadLookControllerHelperUnityお知らせHeadLookControllerHelperをアップデートしました。ダウンロードダウンロードは下記ページからお願いします。Setup機能を追加しました。デフォルトONになっていて、HeadLookControllerをモデルにAddComponentするタイミングを2フレーム遅らせます。これにより、ポーズによってはずれた方向を向いてしまう事象が解決します。Pose16)で見つめてもらいたい!とします。シーンビューでは棒立ちでAnimatorのデフォルトは女豹(Pose16)。この状態でDelaySetupをOFFのままシーンを実行してみると、ターゲットからずれた方向を向きます。これはシーン開始直後はAnimatorがデフォルトステート(Pose16)に遷移しておらず、HeadLookControllerがシーン開始前のポーズ(この例では棒立ち)を基本ポーズとして認識してしまう為と思われます。そこで、シーン開始後に完全にポーズを取るのを待ってからHeadLookControllerをAddComponentした。