DynamicBoneを(複数の)GameObjectに追加する拡張
若干仕様を追い切れているか自信がないのですが、とりあえず載せておきます。
DynamicBoneを(複数の)GameObjectに追加します。
ソースコード
using UnityEngine; using UnityEditor; using System.Collections.Generic; public class DynamicBoneUtil { [MenuItem("GameObject/AddDynamicBone", false, 10)] public static void AddDynamicBone(MenuCommand command) { var list = Selection.gameObjects; foreach (var obj in list) { if (obj != command.context) continue; var col = obj.AddComponent<DynamicBone>(); col.m_Root = obj.transform; var parent = obj.transform.parent; if (parent != null) { var headCol = parent.GetComponent<DynamicBoneCollider>(); if (headCol != null) { if (col.m_Colliders == null) col.m_Colliders = new List<DynamicBoneColliderBase>(); col.m_Colliders.Add(headCol); } } } } }
これをDynamicBoneUtil.csとして、Editorフォルダ作ってその中に保存すると
こんな風に右クリックメニューにAddDynamicBoneが追加されます。
動作
・DynamicBoneを追加
・もしそのオブジェクトの親がDynamicBoneColliderを持っていたら、DynamicBoneのCollidersにソレを追加
(headにColliderをつけて、その子の髪にDynamicBoneをつけるパターンをイメージ)
col.m_Stiffness = 0.5f; とかを追加すれば DynamicBoneの初期パラメータをスキにいじることもできますね。
詰まったところ&注意点
フツーにやると「3つのGameObjectを選択していた場合、3つのオブジェクト全てに対して3つDynamicBoneがつく」みたいな動作に。command.contextをチェックすることで回避できるみたいです。
ただこれが、右クリックでなくメニューバーから呼び出した場合nullになっていることがあるなんて話もあるのでそこはご注意を。普通は右クリックから呼び出すと思いますが……
How to execute MenuItem for multiple objects once. - Unity Answers