・モデルの顔を指定した点(今回はOculusで使うのでカメラ)に向けたい
→AssetのHead Look Controllerを使用する+ちょっと改変
OculusRiftDK2+Unity4.5.5p5+OculusSDK0.4.3.1Betaの組み合わせ
参考サイト
http://www.nicovideo.jp/watch/sm23942801
http://dvorak.hatenablog.com/entry/2014/08/24/230302
・MMDモデルをMMD4Mecanimでインポートした所からスタート
今回モデルはsm23895019のを使用させていただきました
・アセットストアからHead Look Controllerをインポート
プロジェクトパネル→Assets→Head Look Controller
→Scripts→HeadLookController.csに次の2点を書き加える
//30行目付近
public class HeadLookController : MonoBehaviour {
//省略
public Vector3 target = Vector3.zero;
public Transform lookTarget;//←これを追加で記述する
public float effect = 1;
//70行目付近
void LateUpdate () {
target = lookTarget.transform.position;//←これを追加で記述する
if (Time.deltaTime == 0)
return;
・書き換えたら保存し、HeadLookController.csを視点を変えたいモデルにアタッチする
そしたらモデルのInspectorにHead Look Controllerの欄が出てくる。
・まずはLook Targetの欄に
Hierarchy→OVRPlayerController→OVRCameraRigをドラッグ&ドロップ
これで視線の向く先がカメラの方になる、他のものを入れたらそれに注目するようになる
なんとなく見てる方向がずれてるな~って時は
//HeadLookController.csの70行目付近
void LateUpdate () {
target = lookTarget.transform.position;
target.y += 0.1f;//target.x、.zも同様に
のように微調整
・次にSegmentsとNon Affected Jointsを設定すれば終わり
一応のパラメータ例(モデル名は最初からこの名前だったので気にしないように・・・)
・Segments
Segmentsには、見る対象の移動に応じて動いて欲しい部分を設定する。まずSegmentsのSize欄に0が入っているので、2を入力してエンターキーを押す。エンター押さずに入力した後マウスで他のとこクリックしちゃうと0に戻っちゃいます。するとElement0とElement1が出てくるので、それぞれ欄の右側にある●を押して
Element0
FirstTransform-joint_Torso
LastTransform-joint_Torso2
Element1
FirstTransform-joint_Neck
LastTransform-joint_Head
を選択する、恐らく殆どのモデルでここの名前は同じと思われる。なかったら名前から推測して合うのを見つけよう。
そして次のパラメータを設定する、ここはどんな感じで動くかを決めるとこなのでモデルや好みに応じて変更しよう。
・Threshold Angle Difference
モデルと見る対象の角度がこの値以内だと動かさない、という閾値
・Bending Multiplier
モデルと見る対象の角度と、実際に動かす角度との比率
(例)Bending Multiplierが0.5の時、モデルから見る対象が中心角90度の弧を描いて横に移動したとしたら、設定された部位が45度回転する
・Max Angle Difference
モデルと見る対象の角度が、常にこの角度以内になるように動くというもの
なんですがこの数値の変化による動きの変化がいまいちわからない
・Max Bending Angle
回転できる最大角度、180度より大きくすると見る対象の位置によっては軟体生物のような動きをするようになる
・Responsiveness
目標の角度までどれくらい早く移行するかという値、キビキビした動きが好みなら大きめで
・Non Affected Joints
あまり動いてほしくない部位を設定する。effectを小さくすると、segmentsで設定した部位の動きによる影響が小さくなる。公式デモがLeftArmとRightArmを設定し、そのeffectを0.3にしているのでここでもそうしている。
(例)Non Affected JointsにLeftArmをeffect 0で、RightArmをeffect 1で設定すると、胴体が激しく回転する時にRightArmもつられて大きく動くがLeftArmはそこまで動かない。
Override Animationにチェックを入れておくと、例えばMMDのモーションファイルで踊らせている時でも設定した部位はHead Look Controllerによる動きのほうが優先される。チェックなしでも特にモーションが入っていない状態では見る対象に追従してくれる。
最後に上記の画像で設定した浦風くんの動きをどうぞ。Oculusの画面がうまくキャプチャーできずUnity上の画面を取ったので画質が良くないんですが。