3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Iwaken Lab.「好きな技術・コト」Advent Calendar 2021

Day 8

Unityのキャラクターの不要コンポーネントをワンポチでremoveするエディタ拡張をサクッと書く

Posted at

こんにちは、久しぶりにUnityを触るARエンジニアのイワケンです。
VRChat向けにSetUpしたキャラクターを、VRM向けファイルにセットアップする際に**「DynamicBoneコンポーネント外したい!」**と思うわけですが、子供の階層にたくさんあるので、手動で行うと面倒くさいです。

これをEditor拡張の実装でワンポチで解決しましょう。

image.png

手順

  • RemoveDynamicBone.csを作る
  • RemoveDynamicBoneComponentsInChildren関数を実装
  • ヒエラルキー上のキャラクターにアタッチ
  • RemoveDynamicBoneComponentsInChildren関数をインスペクターから呼び出す

RemoveDynamicBoneComponents関数を実装

RemoveDynamicBone.cs
using UnityEditor;
using UnityEngine;

public class RemoveDynamicBone : MonoBehaviour
{
    /// <summary>
    /// 子供のオブジェクトのDynamicBoneをすべてRemoveする
    /// </summary>
    public void RemoveDynamicBoneComponentsInChildren()
    {
        foreach (DynamicBone bone in GetComponentsInChildren<DynamicBone>())
        {
            DestroyImmediate(bone);
        }
    }
    public void CountDynamicBoneComponentsInChildren()
    {
        int count = GetComponentsInChildren<DynamicBone>().Length;
        Debug.Log($"DynamicBoneの数は{count}個です");
    }
}

[CustomEditor(typeof(RemoveDynamicBone))]//拡張するクラスを指定
public class RemoveDynamicBoneEditor : Editor
{
    /// <summary>
    /// InspectorのGUIを更新
    /// </summary>
    public override void OnInspectorGUI()
    {
        //元のInspector部分を表示
        base.OnInspectorGUI();
        RemoveDynamicBone script = target as RemoveDynamicBone;
        //実行するボタンを置く
        if (GUILayout.Button("子供のDynamicBoneの数をDebug.Log"))
        {
            script.CountDynamicBoneComponentsInChildren();
        }

        //実行するボタンを置く
        if (GUILayout.Button("子供のDynamicBoneを削除"))
        {
            script.RemoveDynamicBoneComponentsInChildren();
        }
    }
}

ヒエラルキー上のキャラクターにアタッチ

image.png

そして「子供のDynamicBoneの数をDebug.Log」を押すと、数が表示されました。18ですね。

その後に子供のDunamicBoneを削除を押すと...?

「DynamicBoneの数は0個です」になりました!

image.png

ちゃんとRemovedされてました!!

image.png

参考記事

使用キャラモデル

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?