Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ダイナミックボーンリストウィンドウ
///
///The MIT License
///ver 1.01 2019/1/21
///copyright:gamebox
///使い方:このスクリプトをEditorフォルダ以下にいれます。unityメニュー → Tool →「ダイナミックボーン」を選択
///→その状態でDynamicboneやDynamicColliderがaddされているプレハブを選択するとリストに一覧が表示されます
///→ボーンやコリダーのボタンを押すとそのボーンに移動します
///→ルートが変わるのが煩わしいので、ルートプレハブを選択した状態で一番上の「選択を固定する」をONにしておくとルートが変わりません
///
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Linq;
public class DynamicBoneListWindow : EditorWindow
{
Vector2 scrollViewPosition = new Vector2(0, 0);
//Object mSelectObj = null;
GameObject mSelectObj = null;
/// <summary> 選択を固定する為のフラグ </summary>
bool mIsSelectFixed = false;
//メニューからウィンドウを表示
[MenuItem("Tool/ダイナミックボーンリスト")]
private static void OpenDynamicBoneListWindow()
{
var window = EditorWindow.GetWindow<DynamicBoneListWindow>("ダイナミックボーンリスト");
window.Show();
}
/// <summary>
/// ウィンドウ随時更新 ※1秒に10回呼ばれる
/// </summary>
void OnInspectorUpdate()
{
Repaint();
}
void OnGUI()
{
if ( mIsSelectFixed == false)
{
GameObject tObj = Selection.activeObject as GameObject;
GUI.backgroundColor = ChangeHtmlColorToColor("#8ce1ff");
if (GUILayout.Button("選択を固定する:固定していない"))
{
if(mSelectObj == null) { return; }
mIsSelectFixed = true;
}
if (tObj != null) { mSelectObj = tObj; }
else { mSelectObj = null; }
}
else
{
GUI.backgroundColor = ChangeHtmlColorToColor("#ffeb45");
if(mSelectObj == null) {
mIsSelectFixed = false;
return;
}
if (GUILayout.Button("選択を固定する:固定中:" + mSelectObj.name ))
{
mIsSelectFixed = false;
}
}
GUI.backgroundColor = Color.white;
if (mSelectObj == null) { return; }
var go = mSelectObj as GameObject;
if (go == null) { return; }
scrollViewPosition = EditorGUILayout.BeginScrollView(scrollViewPosition);
var dynamicBone = go.GetComponentsInChildren<DynamicBone>();
foreach (var dyn in dynamicBone)
{
if (GUILayout.Button("ボーン:" + dyn.name))
{
Selection.activeObject = EditorUtility.InstanceIDToObject(dyn.GetInstanceID());
}
}
GUI.backgroundColor = ChangeHtmlColorToColor("#ffc0FF");
var dynamicBoneCollider = go.GetComponentsInChildren<DynamicBoneCollider>();
foreach (var dyn in dynamicBoneCollider)
{
if (GUILayout.Button("コライダー:" + dyn.name))
{
Selection.activeObject = EditorUtility.InstanceIDToObject(dyn.GetInstanceID());
}
}
EditorGUILayout.EndScrollView();
GUI.backgroundColor = Color.white;
GUILayout.Label("選択しているオブジェクト以下の\nDynamicBoneオブジェクトを列挙します");
}
/// <summary>
/// HTMLカラー表記をColorに変換
/// </summary>
/// <param name="htmlColorStr"></param>
/// <returns></returns>
Color ChangeHtmlColorToColor(string htmlColorStr)
{
Color tcol = new Color(255, 255, 255);
if (!ColorUtility.TryParseHtmlString(htmlColorStr, out tcol))
{
//変換エラー
}
return tcol;
}
}