Unity FBXのリグタイプをHumanoidとGenericで右クリックから切り替えられるようにする

割とレアな需要だと思う。私が扱うblenderのアニメーションデータは追加ボーンが多数含まれているため、Unity上で再生するとHumanoidの場合、対応していないボーンの情報が削られて正常に動作しなくなる。

かといってテスト動作などの時にはHumanoidアニメーションを利用したいときもある。そういう場合、FBXのインスペクターでリグタイプを都度変更する必要があった。端的に言ってめんどうくさいわけです。

そんなわけで、右クリックぽちーでこの項目を切り替えられるようにします。

Editorディレクトリに「RigTypeSwitcher.cs」として次を作成する。

using UnityEngine;
using UnityEditor;

public class RigTypeSwitcher : Editor
{
    [MenuItem("Assets/Switch Rig to Humanoid", true)]
    static bool ValidateSwitchToHumanoid()
    {
        return IsAnySelectedObjectModel();
    }

    [MenuItem("Assets/Switch Rig to Humanoid")]
    static void SwitchToHumanoid()
    {
        foreach (var obj in Selection.objects)
        {
            if (IsModel(obj))
            {
                var path = AssetDatabase.GetAssetPath(obj);
                var modelImporter = AssetImporter.GetAtPath(path) as ModelImporter;
                if (modelImporter != null)
                {
                    modelImporter.animationType = ModelImporterAnimationType.Human;
                    modelImporter.SaveAndReimport();
                }
            }
        }
    }

    [MenuItem("Assets/Switch Rig to Generic", true)]
    static bool ValidateSwitchToGeneric()
    {
        return IsAnySelectedObjectModel();
    }

    [MenuItem("Assets/Switch Rig to Generic")]
    static void SwitchToGeneric()
    {
        foreach (var obj in Selection.objects)
        {
            if (IsModel(obj))
            {
                var path = AssetDatabase.GetAssetPath(obj);
                var modelImporter = AssetImporter.GetAtPath(path) as ModelImporter;
                if (modelImporter != null)
                {
                    modelImporter.animationType = ModelImporterAnimationType.Generic;
                    modelImporter.SaveAndReimport();
                }
            }
        }
    }

    static bool IsAnySelectedObjectModel()
    {
        foreach (var obj in Selection.objects)
        {
            if (IsModel(obj))
            {
                return true;
            }
        }
        return false;
    }

    static bool IsModel(Object obj)
    {
        var path = AssetDatabase.GetAssetPath(obj);
        return path.EndsWith(".fbx", System.StringComparison.OrdinalIgnoreCase);
    }
}


これで右クリックメニューにリグをスイッチするメニューを埋め込む事が出来る。わざわざ2つとも表示しているのは、現在どのタイプのリグか考えなくてすむように。切り替え式だと現在Humanoidなのに「Humanoidにしたいポチーあ、もうなってたわ戻さなきゃ」みたいな二度手間がなくなる。


いいなと思ったら応援しよう!