using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
namespace AlicizaX
{
///
/// 游戏对象帮助类
///
public static class GameObjectHelper
{
///
/// 销毁子物体
///
///
[UnityEngine.Scripting.Preserve]
public static void RemoveChildren(GameObject go)
{
for (var i = go.transform.childCount - 1; i >= 0; i--)
{
Destroy(go.transform.GetChild(i).gameObject);
}
}
///
/// 销毁游戏物体
///
///
[UnityEngine.Scripting.Preserve]
public static void DestroyObject(this GameObject gameObject)
{
if (!ReferenceEquals(gameObject, null))
{
if (Application.isEditor && !Application.isPlaying)
{
Object.DestroyImmediate(gameObject);
return;
}
Object.Destroy(gameObject);
}
}
///
/// 销毁游戏物体
///
///
public static void Destroy(GameObject gameObject)
{
gameObject.DestroyObject();
}
///
/// 销毁游戏组件
///
///
[UnityEngine.Scripting.Preserve]
public static void DestroyComponent(UnityEngine.Component component)
{
if (!ReferenceEquals(component, null))
{
if (Application.isEditor && !Application.isPlaying)
{
Object.DestroyImmediate(component);
return;
}
Object.Destroy(component);
}
}
///
/// 在指定场景中查找特定名称的节点。
///
/// 场景名称。
/// 节点名称。
/// 找到的节点的GameObject实例,如果没有找到返回null。
public static GameObject FindChildGamObjectByName(string nodeName, string sceneName = null)
{
Scene scene;
if (sceneName.IsNullOrWhiteSpace())
{
scene = SceneManager.GetActiveScene();
}
else
{
scene = SceneManager.GetSceneByName(sceneName);
if (!scene.isLoaded)
{
return null;
}
}
var rootObjects = scene.GetRootGameObjects();
foreach (var rootObject in rootObjects)
{
var result = FindChildGamObjectByName(rootObject, nodeName);
if (result.IsNotNull())
{
return result;
}
}
return null;
}
///
/// 根据游戏对象名称查询子对象
///
///
///
///
[UnityEngine.Scripting.Preserve]
public static GameObject FindChildGamObjectByName(GameObject gameObject, string name)
{
var transform = gameObject.transform.FindChildName(name);
if (transform.IsNotNull())
{
return transform.gameObject;
}
return null;
}
///
/// 创建游戏对象
///
///
///
///
[UnityEngine.Scripting.Preserve]
public static GameObject Create(Transform parent, string name)
{
Debug.Assert(!ReferenceEquals(parent, null), nameof(parent) + " == null");
var gameObject = new GameObject(name);
gameObject.transform.SetParent(parent);
return gameObject;
}
///
/// 创建游戏对象
///
///
///
///
[UnityEngine.Scripting.Preserve]
public static GameObject Create(GameObject parent, string name)
{
Debug.Assert(!ReferenceEquals(parent, null), nameof(parent) + " == null");
return Create(parent.transform, name);
}
///
/// 重置游戏对象的变换数据
///
///
///
[UnityEngine.Scripting.Preserve]
public static void ResetTransform(GameObject gameObject)
{
gameObject.transform.localScale = Vector3.one;
gameObject.transform.localPosition = Vector3.zero;
gameObject.transform.localRotation = Quaternion.identity;
}
///
/// 设置对象的显示排序层
///
/// 游戏对象
/// 显示层
[UnityEngine.Scripting.Preserve]
public static void SetSortingGroupLayer(GameObject gameObject, string sortingLayer)
{
SortingGroup[] sortingGroups = gameObject.GetComponentsInChildren();
foreach (SortingGroup sg in sortingGroups)
{
sg.sortingLayerName = sortingLayer;
}
}
///
/// 设置对象的层
///
/// 游戏对象
/// 层
/// 是否设置子物体
[UnityEngine.Scripting.Preserve]
public static void SetLayer(GameObject gameObject, int layer, bool children = true)
{
if (gameObject.layer != layer)
{
gameObject.layer = layer;
}
if (children)
{
Transform[] transforms = gameObject.GetComponentsInChildren();
foreach (var sg in transforms)
{
sg.gameObject.layer = layer;
}
}
}
}
}