-
Notifications
You must be signed in to change notification settings - Fork 0
/
GameObjectExtensions.cs
155 lines (137 loc) · 4.03 KB
/
GameObjectExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System.Collections.Generic;
using UnityEngine;
public static class GameObjectExtensions
{
/// <summary>
/// Returns the full path of a game object, i.e. the names of all
/// ancestors and the game object itself.
/// e.g. Canvas/RootPanel/UiGroup/Image
/// </summary>
/// <param name="gameObject">Game object to get the path of.</param>
/// <returns>Full path of the game object.</returns>
public static string GetFullPath(this GameObject gameObject)
{
return GetFullPath(gameObject, false);
}
/// <summary>
/// Returns the full path of a game object, i.e. the names of all
/// ancestors and the game object itself.
/// e.g. GameScene/Canvas/RootPanel/UiGroup/Image
/// </summary>
/// <param name="gameObject">Game object to get the path of.</param>
/// <param name="includeScene">Include the scene in the path information</param>
/// <returns>Full path of the game object.</returns>
public static string GetFullPath(this GameObject gameObject, bool includeScene)
{
if (gameObject == null)
{
return string.Empty;
}
string path = gameObject.name;
var currentTransform = gameObject.transform;
while (currentTransform.parent != null)
{
currentTransform = currentTransform.parent;
var go = currentTransform.gameObject;
path = go.name + "/" + path;
}
if (includeScene)
{
path = gameObject.scene.name + "/" + path;
}
return path;
}
/// <summary>
/// Produces garbage
/// </summary>
/// <param name="go"></param>
/// <returns></returns>
public static List<GameObject> GetDescendants(this GameObject go)
{
var list = new List<GameObject>();
go.GetDescendants(ref list);
return list;
}
/// <summary>
/// Produces garbage
/// </summary>
/// <param name="go"></param>
/// <returns></returns>
public static List<GameObject> GetDescendantsAndSelf(this GameObject go)
{
var list = new List<GameObject> {go};
go.GetDescendants(ref list);
return list;
}
public static void GetDescendants(this GameObject go, ref List<GameObject> list)
{
var transform = go.transform;
for (int i = 0; i < transform.childCount; i++)
{
var childGo = transform.GetChild(i).gameObject;
list.Add(childGo);
childGo.GetDescendants(ref list);
}
}
/// <summary>
/// Produces garbage
/// </summary>
/// <param name="parent"></param>
/// <returns></returns>
public static List<GameObject> GetChildren(this GameObject parent)
{
var list = new List<GameObject>();
var transform = parent.transform;
for (int i = 0; i < transform.childCount; i++)
{
var child = transform.GetChild(i).gameObject;
list.Add(child);
}
return list;
}
public static void SetLayers(this GameObject go, string layer)
{
go.SetLayers(LayerMask.NameToLayer(layer));
}
public static void SetLayers(this GameObject go, int layer)
{
go.layer = layer;
var transform = go.transform;
for (int i = 0; i < transform.childCount; i++)
{
var child = transform.GetChild(i).gameObject;
child.SetLayers(layer);
}
}
public static void SetActiveSave(this GameObject gameObject, bool active)
{
if (gameObject == null || gameObject.activeSelf == active)
{
return;
}
gameObject.SetActive(active);
}
public static GameObject AddChild(this GameObject parent, GameObject childPrefab)
{
return Object.Instantiate(childPrefab, parent.transform);
}
public static GameObject AddChild(this GameObject parent, GameObject childPrefab, Vector3 position, Quaternion localRotation)
{
return Object.Instantiate(childPrefab, position, localRotation, parent.transform);
}
public static GameObject AddChild(this GameObject parent, string name)
{
var go = new GameObject(name);
go.transform.SetParent(parent.transform, false);
return go;
}
public static void DestroyChildren(this GameObject parent)
{
var transform = parent.transform;
for (int i = 0; i < transform.childCount; i++)
{
var child = transform.GetChild(i).gameObject;
Object.Destroy(child);
}
}
}