mirror of
https://github.com/ConjureETS/Unity_Utils.git
synced 2026-03-23 20:40:58 +00:00
125 lines
3.9 KiB
C#
125 lines
3.9 KiB
C#
#if FUSION_WEAVER
|
|
using Fusion;
|
|
#endif
|
|
using UnityEngine;
|
|
|
|
namespace Utilities.Extensions
|
|
{
|
|
public static class GameObjectExtensions
|
|
{
|
|
public static int GetNumberOfComponents(this GameObject gameObject) =>
|
|
gameObject.GetComponentsInChildren<Component>().Length - 1;
|
|
|
|
public static void Show(this GameObject gameObject) => gameObject.SetActive(true);
|
|
|
|
public static void Hide(this GameObject gameObject) => gameObject.SetActive(false);
|
|
|
|
public static bool IsVisible(this GameObject gameObject) => gameObject.activeSelf;
|
|
|
|
/// <summary>
|
|
/// First, look in the parent if it has the component, then the current gameObject
|
|
/// This is done because entities have their collider a level lower than their parent game object with contains
|
|
/// most of their scripts.
|
|
/// </summary>
|
|
public static T GetComponentInEntity<T>(this GameObject gameObject) where T : Component
|
|
{
|
|
T component = gameObject.GetComponentInParent<T>();
|
|
|
|
if (!component)
|
|
{
|
|
component = gameObject.GetComponent<T>();
|
|
}
|
|
|
|
if (!component)
|
|
{
|
|
component = gameObject.GetComponentInChildren<T>();
|
|
}
|
|
|
|
if (!component)
|
|
{
|
|
component = gameObject.transform.parent.GetComponentInChildren<T>();
|
|
}
|
|
|
|
return component;
|
|
}
|
|
|
|
public static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component
|
|
{
|
|
if (!gameObject.TryGetComponent(out T component))
|
|
{
|
|
component = gameObject.AddComponent<T>();
|
|
}
|
|
|
|
return component;
|
|
}
|
|
|
|
public static T GetComponentInParents<T>(this GameObject gameObject) where T : Component
|
|
{
|
|
T parentComponent = null;
|
|
|
|
GameObject currentParent = gameObject;
|
|
GameObject root = gameObject.GetRoot();
|
|
while (currentParent != root && currentParent.GetComponent<T>() == null && parentComponent == null)
|
|
{
|
|
currentParent = currentParent.GetParent();
|
|
parentComponent = currentParent.GetComponent<T>();
|
|
}
|
|
|
|
return parentComponent;
|
|
}
|
|
|
|
#if FUSION_WEAVER
|
|
public static T GetComponentInEntity<T>(this NetworkObject gameObject) where T : Component
|
|
{
|
|
return gameObject.gameObject.GetComponentInEntity<T>();
|
|
}
|
|
#endif
|
|
|
|
public static GameObject GetParent(this GameObject gameObject)
|
|
{
|
|
var parent = gameObject.transform.parent;
|
|
return parent ? parent.gameObject : gameObject;
|
|
}
|
|
|
|
public static GameObject GetRoot(this GameObject gameObject)
|
|
{
|
|
var root = gameObject.transform.root;
|
|
return root ? root.gameObject : gameObject;
|
|
}
|
|
|
|
public static bool CompareEntities(this GameObject gameObject, GameObject other)
|
|
{
|
|
return other == gameObject ||
|
|
other.GetParent() == gameObject ||
|
|
other.GetParent() == gameObject.GetParent() ||
|
|
other == gameObject.GetParent();
|
|
}
|
|
|
|
public static bool HasTag(this GameObject gameObject)
|
|
{
|
|
return !gameObject.CompareTag("Untagged");
|
|
}
|
|
|
|
public static bool AssignTagIfDoesNotHaveIt(this GameObject gameObject, string tag)
|
|
{
|
|
if (!gameObject.HasTag())
|
|
gameObject.tag = tag;
|
|
|
|
return gameObject.CompareTag(tag);
|
|
}
|
|
|
|
public static bool HasLayer(this GameObject gameObject)
|
|
{
|
|
return gameObject.layer != 0;
|
|
}
|
|
|
|
public static bool AssignLayerIfDoesNotHaveIt(this GameObject gameObject, int layer)
|
|
{
|
|
if (!gameObject.HasLayer())
|
|
gameObject.layer = layer;
|
|
|
|
return gameObject.layer == layer;
|
|
}
|
|
|
|
}
|
|
} |