From 9e3505bc27c1faf4b95c885069d86121834ed313 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com>
Date: Fri, 11 Apr 2025 20:03:45 +0800
Subject: [PATCH] modify
---
.../ComponentExtensions.cs | 97 +++++++++++++++++++
.../ComponentExtensions.cs.meta | 3 +
2 files changed, 100 insertions(+)
create mode 100644 Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs
create mode 100644 Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs.meta
diff --git a/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs b/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs
new file mode 100644
index 0000000..4e1abef
--- /dev/null
+++ b/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs
@@ -0,0 +1,97 @@
+using UnityEngine.Assertions;
+
+namespace UnityEngine
+{
+ ///
+ /// .
+ ///
+ public static class ComponentExtensions
+ {
+ ///
+ /// 从目标组件中获取一个组件,如果是组件类型不存在,则添加
+ ///
+ public static Component GetOrAddComponent(
+ this Component obj, System.Type type)
+ {
+ var component = obj.GetComponent(type);
+ if (component == null)
+ {
+ component = obj.gameObject.AddComponent(type);
+ }
+
+ return component;
+ }
+
+ ///
+ /// 从目标组件中获取一个组件,如果是组件类型不存在,则添加
+ ///
+ public static T GetOrAddComponent(
+ this Component obj) where T : Component
+ {
+ var component = obj.GetComponent();
+ if (component == null)
+ {
+ component = obj.gameObject.AddComponent();
+ }
+
+ return component;
+ }
+
+ ///
+ /// 从目标组件中获取一个组件,如果是组件类型不存在,则添加
+ /// 标记不保存
+ ///
+ public static T GetOrAddComponentDontSave(
+ this Component obj) where T : Component
+ {
+ var component = obj.GetComponent();
+ if (component == null)
+ {
+ component = obj.gameObject.AddComponent();
+ component.hideFlags = HideFlags.DontSave;
+ }
+
+ return component;
+ }
+
+ ///
+ /// 检查目标组件的GameObject上是否有一个或多个指定类型的组件
+ ///
+ public static bool HasComponent(
+ this Component obj, System.Type type)
+ {
+ return obj.GetComponent(type) != null;
+ }
+
+ ///
+ /// 检查目标组件的GameObject上是否有一个或多个指定类型的组件
+ ///
+ public static bool HasComponent(
+ this Component obj) where T : Component
+ {
+ return obj.GetComponent() != null;
+ }
+
+ ///
+ /// 在parent中查找组件,即使该组件处于非活动状态或已禁用 都能查询
+ ///
+ public static T GetComponentInParentHard(
+ this Component obj) where T : Component
+ {
+ Assert.IsNotNull(obj);
+ var transform = obj.transform;
+ while (transform != null)
+ {
+ var component = transform.GetComponent();
+ if (component != null)
+ {
+ return component;
+ }
+
+ transform = transform.parent;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs.meta b/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs.meta
new file mode 100644
index 0000000..e292248
--- /dev/null
+++ b/Runtime/Extension/UnityEngage.GameObject/ComponentExtensions.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 15e221e13b3e456aa5e3473d1e28f921
+timeCreated: 1744372997
\ No newline at end of file