csharp サクッとオブジェクト同士を阶层化させるエディタ拡张.GameObjectは非対応です

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp サクッとオブジェクト同士を阶层化させるエディタ拡张.GameObjectは非対応です相关的知识,希望对你有一定的参考价值。

using UnityEngine;
using System.Collections;
using UnityEditor;

/// <summary>
/// サクッとオブジェクト同士を階層化させるエディタ拡張。GameObjectは非対応です
/// </summary>
public class ContainWindow: EditorWindow
{
    [MenuItem("Window/ContainWindow")]
    private static void Init ()
    {
        var w = EditorWindow.GetWindow <ContainWindow> ();
        w.titleContent = new GUIContent ("ContainWindow");
        w.Show ();
    }

    private Object _parent;
    private Object _childObj;
    private Object _deleteObj;

    private void OnGUI ()
    {
        EditorGUILayout.LabelField ("サクッとオブジェクト同士を階層化させます");
        EditorGUILayout.Space ();
        EditorGUILayout.LabelField ("親オブジェクト");
        _parent = EditorGUILayout.ObjectField (_parent, typeof(Object), false) as Object;
        EditorGUILayout.LabelField ("子供にするオブジェクト");
        _childObj = EditorGUILayout.ObjectField (_childObj, typeof(Object), true) as Object;
        EditorGUILayout.LabelField ("削除したいオブジェクト");
        _deleteObj = EditorGUILayout.ObjectField (_deleteObj, typeof(Object), true) as Object;
        if (_deleteObj != null)
        {
            if (GUILayout.Button ("Delete", GUILayout.Height (30f)))
            {
                Object.DestroyImmediate (_deleteObj, true);
                AssetDatabase.Refresh ();
                AssetDatabase.SaveAssets ();
            }
        }

        if (Varidate() == false)
        {
            return;
        }

        EditorGUILayout.LabelField("子オブジェクトがコピーされて親子関係になります");

        if (GUILayout.Button ("Start Contain", GUILayout.Height (30f)))
        {
            var obj = Instantiate(_childObj);
            // Remove name "(Clone)"
            obj.name = _childObj.name;
            AssetDatabase.AddObjectToAsset (obj, AssetDatabase.GetAssetPath (_parent));
            AssetDatabase.ImportAsset (AssetDatabase.GetAssetPath (_parent));
            AssetDatabase.Refresh ();
            AssetDatabase.SaveAssets ();
        }
    }

    private bool Varidate()
    {
        if (_parent == null || _childObj == null)
        {
            return false;
        }

        if (_parent is GameObject)
        {
            _parent = null;
            return false;
        }
        if (_childObj is GameObject)
        {
            _childObj = null;
            return false;
        }

        if (_parent == _childObj)
        {
            _childObj = null;
            return false;
        }

        return true;
    }
}

以上是关于csharp サクッとオブジェクト同士を阶层化させるエディタ拡张.GameObjectは非対応です的主要内容,如果未能解决你的问题,请参考以下文章

csharp DIできる状态で,动的にオブジェクトを生成する(普通にGameObject.Instantiateすると,生成されたオブジェクトにはDIされない))

csharp 动的に生成したオブジェクトで机能DI DI

csharp DIが机能するように,オブジェクトを动的生成する

markdown SharedPreferenceに単纯なオブジェクト,泛型を使ったオブジェクトを保存

text 数学オブジェクト

markdown オブジェクトの判定