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にしたいポチーあ、もうなってたわ戻さなきゃ」みたいな二度手間がなくなる。