読者です 読者をやめる 読者になる 読者になる

Onoty3D

Unityに関するメモとか

SDユニティちゃんでファイティングユニティちゃん

先日開催されたGGJ(Gloval Game Jam)に向けて、ユニティちゃんの公式でSDユニティの新作「SDこはくちゃんズ」が公開されました。
unity-chan.com
さっそくクアッドアローさんのファイティングユニティちゃんのモーションを適用させたりして、遊ばせて頂きました。




ちなみにユニティおじさんは、元の体のサイズをパーツ単位で調整して無理やりSD化しましたw

ところでSDユニティちゃんにファイティングユニティちゃんのモーションを適用させると、目がグルグル回っちゃうようになります(結構怖い)。
f:id:onoty3d:20160201150604p:plain:w364
はみ出ることも。

幾つか解決法があるので紹介します。

解決法1
参考:
SDユニティちゃんでキック技モーション|ゆにてぃメイト
SDユニティちゃんとファイティングUnityちゃん - ぬる湯の端書
上記ブログで言及されているように、モーションに対してHead部分だけマスクをかける方法です。
ブログ内にも言及がありますが、Head全体がマスクされてしまうので、Headの角度がおかしくなるモーションもあります。

解決法2
HumanoidのConfigureで目のボーンを未指定にすることで、目をモーションの対象外に出来ます。
f:id:onoty3d:20160201150624p:plain
f:id:onoty3d:20160201150632p:plain
この場合、頭はちゃんと動きます。
ただし、Mecanimの機能を使った視線操作等は出来なくなります。
自分がtwitterに投稿したGIFアニメは、この方法を使っています。

解決法3
蛇モーションで遊んでいた時、ガニ股になってしまったSDユニティちゃんの足をスクリプトで回転させて内股にする、という方法を学びました。


SetBoneLocalRotationというメソッドを利用することで、任意のボーンの回転を制御することが出来ます。
この方法で、足と同様に目のボーンの回転をスクリプトで制御できます。
事前にAnimatorのlayerの設定でIKPassにチェックを入れておいてください。
f:id:onoty3d:20160201162058p:plain
ソースはこんな感じ。特にパラメータをいじらなければ、両目の回転が角度(0,0,0)で固定され、グルグルしなくなります。

using UnityEngine;

public class EyeRotator : MonoBehaviour
{
    public Vector3 RotationL;
    public Vector3 RotationR;

    private Animator _animator;

    // Use this for initialization
    private void Start()
    {
        this._animator = this.GetComponent<Animator>();
    }

    // Update is called once per frame
    private void Update()
    {
    }

    private void OnAnimatorIK(int layerIndex)
    {
        this._animator.SetBoneLocalRotation(HumanBodyBones.LeftEye, Quaternion.Euler(this.RotationL));
        this._animator.SetBoneLocalRotation(HumanBodyBones.RightEye, Quaternion.Euler(this.RotationR));
    }
}

この方法だと、目の回転を固定したい時だけスクリプトを適用すればいいので、スクリプトさえ用意してしまえば一番お手軽かもしれません。

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています