知り合いが必要そうだったので。
後で余裕があれば解説とか書きます。
usingUnityEngine;usingSystem.Collections;usingUnityEditor;usingSystem.Collections.Generic;publicclassMenuItemTest:MonoBehaviour{[MenuItem("CustomMenu/Rename %t",false,1)]staticvoidOutputConsole(){Transform[]transformArray=Selection.activeGameObject.GetComponentsInChildren<Transform>();foreach(TransformeintransformArray){if(e.name==Selection.activeGameObject.name)continue;e.name=e.name+"_"+Selection.activeGameObject.name;}}[MenuItem("CustomMenu/DoubleCheck %u",false,1)]staticvoidOutputConsole2(){List<string>check=newList<string>();Transform[]transformArray=Selection.activeGameObject.GetComponentsInChildren<Transform>();foreach(TransformeintransformArray){if(check.Contains(e.name)==true){e.name=e.name+"_1";}check.Add(e.name);}}}
以下、追記
使用例(なにをするスクリプトか)1
ヒエラルキーの先頭を押した状態でCtrl + T
を押すと、
こうなります。
使用例(なにをするスクリプトか)2
ヒエラルキーの先頭を押した状態でCtrl+U
を押すと、
こうなります。
理由(なぜこれが必要か)
VRMをエクスポートする際、ヒエラルキーに同じ名前のオブジェクトがあるとエラーになってしまいます。一方、あるモデルに別のモデルを組み合わせるには、つまり服を着せ替える場合がほとんどなのですが、着せ替え先のボーンと、着せ替え元の対応するボーンを親子関係にする方法が一般的です。この結果、両者が同じボーンの名前(Neck
とかChest
とか)を持っていた場合、上に述べたエラーを引き起こしてしまいます。これを防ぐには、オブジェクトの名前を変える必要がありますが、リボンや髪などは時に数十個のボーンが設定されていることがあるため、中々の手間になります。そこで、リネームだけを一括して行うスクリプトを作成しました。
方法
プロジェクトのAssets内に適当にC# Script
を作って、上のコードをコピペしてください。エディタに戻って、
このようなメニューが表示されていれば適用成功です。後はCtrl+T
やCtrl+U
を押せばスクリプトが実行されます。
お世話になったページ
UnityのEditorを拡張して自前のメニュー項目を表示する
Unity 直下の子供を取得 / 直下以下の子供を再帰的に取得 方法