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