20.Selection常用静态成员

20.Selection-常用静态成员


20.1 知识点

获取当前选择的Object

获取当前在面板上选择的游戏物体Object
未选择则返回Null
选择多个则返回第一个选择的游戏物体
Selection.activeObject

private StringBuilder str = new StringBuilder("没有选择");

private void OnGUI()
{
    // 获取当前选择的Object
    if (GUILayout.Button("获取当前选择的Object的名字"))
    {
        if (Selection.activeObject != null)
        {
            str.Clear();
            str.Append(Selection.activeObject.name);

            if (Selection.activeObject is GameObject)
                Debug.Log("它是游戏对象");
            else if (Selection.activeObject is Texture)
                Debug.Log("它是一张纹理");
            else if (Selection.activeObject is TextAsset)
                Debug.Log("它是一个文本");
            else
                Debug.Log("它是其他类型的资源");
        }
        else
        {
            str.Clear();
            str.Append("没有选择");
        }
    }

    EditorGUILayout.LabelField("当前选择的对象", str.ToString());
}

获取当前选择的GameObject

获取当前在面板上选择的游戏物体GameObject
未选择或者选择的不是游戏对象则返回Null
选择多个则返回第一个选择的游戏物体
Selection.activeGameObject

private StringBuilder str2 = new StringBuilder("没有选择");

private void OnGUI()
{
    // 获取当前选择的GameObject
    if (GUILayout.Button("获取当前选择的GameObject的名字"))
    {
        if (Selection.activeGameObject != null)
        {
            str2.Clear();
            str2.Append(Selection.activeGameObject.name);
        }
        else
        {
            str2.Clear();
            str2.Append("没有选择");
        }
    }
    EditorGUILayout.LabelField("当前选择GameObject对象", str2.ToString());
}

获取当前选择的Transform

获取当前在面板上选择的游戏物体的Transform 只能获取Hierarchy窗口的对象
未选择则返回Null
选择多个则返回第一个选择的游戏物体
Selection.activeTransform

private StringBuilder str3 = new StringBuilder("没有选择");

private void OnGUI()
{
    // 获取当前选择的Transform
    if (GUILayout.Button("获取当前选择的Transform的名字"))
    {
        if (Selection.activeTransform != null)
        {
            str3.Clear();
            str3.Append(Selection.activeTransform.name);
            Selection.activeTransform.position = new Vector3(10, 10, 10);
        }
        else
        {
            str3.Clear();
            str3.Append("没有选择");
        }
    }

    EditorGUILayout.LabelField("当前选择Transform对象", str3.ToString());
}

获取当前选择的所有Object

获取当前在面板上选择的物体数组
未选择则返回Null
Selection.objects

private StringBuilder str4 = new StringBuilder("没有选择");

private void OnGUI()
{
    // 获取当前选择的所有Object
    if (GUILayout.Button("获取当前选择的所有Object的名字"))
    {
        if (Selection.count != 0)
        {
            str4.Clear();
            for (int i = 0; i < Selection.objects.Length; i++)
            {
                str4.Append(Selection.objects[i].name + "||");
            }
        }
        else
        {
            str4.Clear();
            str4.Append("没有选择");
        }
    }

    EditorGUILayout.LabelField("当前选择的所有Object对象", str4.ToString());
}

获取当前选择的所有GameObject

获取当前选择的所有GameObject
未选择则返回Null
Selection.gameObjects
可以遍历获取所有信息

获取当前选择的所有Transform

获取当前选择的所有Transform
未选择则返回Null
Selection.transforms
可以遍历获取所有信息


20.2 知识点代码

Lesson20_Selection_常用静态成员

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson20_Selection_常用静态成员 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 获取当前选择的Object

        //获取当前在面板上选择的游戏物体Object
        //未选择则返回Null
        //选择多个则返回第一个选择的游戏物体
        //Selection.activeObject

        #endregion

        #region 知识点二 获取当前选择的GameObject

        //获取当前在面板上选择的游戏物体GameObject
        //未选择或者选择的不是游戏对象则返回Null
        //选择多个则返回第一个选择的游戏物体
        //Selection.activeGameObject

        #endregion

        #region 知识点三 获取当前选择的Transform

        //获取当前在面板上选择的游戏物体的Transform 只能获取Hierarchy窗口的对象
        //未选择则返回Null
        //选择多个则返回第一个选择的游戏物体
        //Selection.activeTransform

        //只能获取到场景中的对象的Transform

        #endregion

        #region 知识点四 获取当前选择的所有Object

        //获取当前在面板上选择的物体数组
        //未选择则返回Null
        //Selection.objects 

        #endregion

        #region 知识点五 获取当前选择的所有GameObject

        //获取当前在面板上选择的游戏物体或Project中预设体 GameObject数组
        //未选择则返回Null
        //Selection.gameObjects
        //可以遍历获取所有信息

        #endregion

        #region 知识点六 获取当前选择的所有Transform

        //获取当前在面板上选择的游戏物体Transform数组
        //未选择则返回Null
        //Selection.transforms
        //可以遍历获取所有信息

        #endregion
    }
}

MySelectionLearnWindow

using System;
using System.Text;
using UnityEditor;
using UnityEngine;

public class MySelectionLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MySelectionLearnWindow")]
    private static void OpenMySelectionLearnWindow()
    {
        MySelectionLearnWindow win = EditorWindow.GetWindow<MySelectionLearnWindow>("Selection学习窗口");
        win.Show();
    }

    #region Lesson20_Selection_常用静态成员

    private StringBuilder str = new StringBuilder("没有选择");
    private StringBuilder str2 = new StringBuilder("没有选择");
    private StringBuilder str3 = new StringBuilder("没有选择");
    private StringBuilder str4 = new StringBuilder("没有选择");

    #endregion


    private void OnGUI()
    {
        #region Lesson20_Selection_常用静态成员

        //1.当前选择的Object
        if (GUILayout.Button("获取当前选择的Object的名字"))
        {
            if (Selection.activeObject != null)
            {
                str.Clear();
                str.Append(Selection.activeObject.name);

                if (Selection.activeObject is GameObject)
                    Debug.Log("它是游戏对象");
                else if (Selection.activeObject is Texture)
                    Debug.Log("它是一张纹理");
                else if (Selection.activeObject is TextAsset)
                    Debug.Log("它是一个文本");
                else
                    Debug.Log("它是其他类型的资源");
            }
            else
            {
                str.Clear();
                str.Append("没有选择");
            }
        }

        EditorGUILayout.LabelField("当前选择的对象", str.ToString());


        //2.当前选择的GameObject
        if (GUILayout.Button("获取当前选择的GameObject的名字"))
        {
            if (Selection.activeGameObject != null)
            {
                str2.Clear();
                str2.Append(Selection.activeGameObject.name);
            }
            else
            {
                str2.Clear();
                str2.Append("没有选择");
            }
        }

        EditorGUILayout.LabelField("当前选择GameObject对象", str2.ToString());

        //3.当前选择的Transform
        if (GUILayout.Button("获取当前选择的Transform的名字"))
        {
            if (Selection.activeTransform != null)
            {
                str3.Clear();
                str3.Append(Selection.activeTransform.name);
                Selection.activeTransform.position = new Vector3(10, 10, 10);
            }
            else
            {
                str3.Clear();
                str3.Append("没有选择");
            }
        }

        EditorGUILayout.LabelField("当前选择Transform对象", str3.ToString());

        //4.当前选择的所有Object
        if (GUILayout.Button("获取当前选择的所有Object的名字"))
        {
            if (Selection.count != 0)
            {
                str4.Clear();
                for (int i = 0; i < Selection.objects.Length; i++)
                {
                    str4.Append(Selection.objects[i].name + "||");
                }
            }
            else
            {
                str4.Clear();
                str4.Append("没有选择");
            }
        }

        EditorGUILayout.LabelField("当前选择的所有Object对象", str4.ToString());

        //5.当前选择的所有GameObject
        //Selection.gameObjects 略

        //6.当前选择的所有Transform
        //Selection.transforms 略

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏