Last active
February 10, 2020 01:26
-
-
Save gamebox777/397d3184f78594a620c4c57eed074888 to your computer and use it in GitHub Desktop.
ダイナミックボーンリストウィンドウ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// | |
///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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
説明ページはこちら
http://www.unitygamebox.com/entry/2020/01/20/%E3%80%90unity%E3%80%91dynamicbone%E3%81%8C%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%9C%E3%83%BC%E3%83%B3%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E8%A1%A8