TomoGのごちゃまぜ倉庫

MENU

Unity ✖ Blenderでキャラクタークリエイト

今回はBlenderで作ったモデルをUnityでキャラクリのようにいじる方法を書いていきます。

この方法はキャラクターの表情を変えたりすることにも使用できます。

◇参考動画

youtu.be

◇方法

Blenderで準備

シェイプキーがあるモデルを作成してください。

tomog.hatenablog.com

作成したら、そのままFBX形式にて出力を行ってください。


■Unityでの使用

UnityのAssetsにモデルをインポート。

その後ヒエラルキーに配置してください。

f:id:TomoG:20181109211508p:plain

このような状態になります。

インスペクターにあるSkinned Mesh RendererのBlendeShapesがBlenderにて設定されたシェイプキーになっていると思います。

Blenderのシェイプキーは0~1.0の間でしたが

Unityでは0~100になっています。

この値を変更することで、シェイプキーで設定したようにメッシュが変化します。

このパラメータを保存し、常に使っていればキャラクリが出来るように見えると思います。

tomog.hatenablog.com

■参考動画に使用したソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ShapeKeyTest : MonoBehaviour {

    [SerializeField]
    private GameObject TestObject;

    [SerializeField]
    private Slider key1Slider;
    [SerializeField]
    private Slider key2Slider;
    [SerializeField]
    private int key1Val;
    [SerializeField]
    private int key2Val;

    [SerializeField]
    private int preKey1Val;
    [SerializeField]
    private int preKey2Val;

    // Use this for initialization
    void Start () {
        LoadObject();

        key1Val = 0;
        preKey1Val = 0;

        key2Val = 0;
        preKey2Val = 0;
	}
	
	// Update is called once per frame
	void Update () {
        ChangeObject();
	}

    private void LoadObject()
    {
        TestObject = GameObject.Find("Sample");
        key1Slider = GameObject.Find("Key1Slider").GetComponent<Slider>();
        key2Slider = GameObject.Find("Key2Slider").GetComponent<Slider>();
    }

    public void SetKey1Val()
    {
        key1Val = (int)key1Slider.value;
    }

    public void SetKey2Val()
    {
        key2Val = (int)key2Slider.value;
    }

    private void ChangeObject()
    {
        if(key1Val != preKey1Val)
        {
            preKey1Val = key1Val;
            TestObject.GetComponent<SkinnedMeshRenderer>().SetBlendShapeWeight(0, key1Val);
        }

        if (key2Val != preKey2Val)
        {
            preKey2Val = key2Val;
            TestObject.GetComponent<SkinnedMeshRenderer>().SetBlendShapeWeight(1, key2Val);
        }
    }
}

ソースコードの内容は、スライダーの値をそのままパラメータとして取得し設定しているだけです。
Sampleが今回キャラクリに使用したオブジェクトとなっています。