Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9374

着せ替え時の名前衝突を避けるためだけのリネームスクリプト

$
0
0

 知り合いが必要そうだったので。
 後で余裕があれば解説とか書きます。

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

image.png

 ヒエラルキーの先頭を押した状態でCtrl + Tを押すと、

image.png

 こうなります。

使用例(なにをするスクリプトか)2

image.png

 ヒエラルキーの先頭を押した状態でCtrl+Uを押すと、

image.png

 こうなります。

理由(なぜこれが必要か)

 VRMをエクスポートする際、ヒエラルキーに同じ名前のオブジェクトがあるとエラーになってしまいます。一方、あるモデルに別のモデルを組み合わせるには、つまり服を着せ替える場合がほとんどなのですが、着せ替え先のボーンと、着せ替え元の対応するボーンを親子関係にする方法が一般的です。この結果、両者が同じボーンの名前(NeckとかChestとか)を持っていた場合、上に述べたエラーを引き起こしてしまいます。これを防ぐには、オブジェクトの名前を変える必要がありますが、リボンや髪などは時に数十個のボーンが設定されていることがあるため、中々の手間になります。そこで、リネームだけを一括して行うスクリプトを作成しました。

方法

 プロジェクトのAssets内に適当にC# Scriptを作って、上のコードをコピペしてください。エディタに戻って、

image.png

 このようなメニューが表示されていれば適用成功です。後はCtrl+TCtrl+Uを押せばスクリプトが実行されます。

お世話になったページ

UnityのEditorを拡張して自前のメニュー項目を表示する
Unity 直下の子供を取得 / 直下以下の子供を再帰的に取得 方法


Viewing all articles
Browse latest Browse all 9374

Latest Images

Trending Articles