using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
|
public static class TransformExtension
|
{
|
|
|
public static void Destroy(this Transform transform)
|
{
|
if (Application.isPlaying)
|
GameObject.Destroy(transform);//延迟销毁,下一帧执行,在游戏运行时使用
|
else
|
GameObject.DestroyImmediate(transform);//立即销毁,在编辑时使用
|
}
|
|
//清空子物体
|
|
public static void ClearAllChilds(this Transform transform)
|
{
|
var count = transform.childCount;
|
for (var i = 0; i < count; i++)
|
{
|
if (Application.isPlaying)
|
GameObject.Destroy(transform.GetChild(i).gameObject);//延迟销毁,下一帧执行,在游戏运行时使用
|
else
|
GameObject.DestroyImmediate(transform.GetChild(0).gameObject);//立即销毁,在编辑时使用
|
|
}
|
}
|
|
|
public static void SetParentEx(this Transform transform, Transform parent, Vector3 localPosition, Quaternion rotation, Vector3 scale)
|
{
|
|
if (transform != null && parent != null)
|
{
|
transform.SetParent(parent);
|
transform.localPosition = localPosition;
|
transform.localRotation = rotation;
|
transform.localScale = scale;
|
}
|
}
|
|
|
public static void SetParentEx(this Transform transform, Transform parent, Vector3 localPosition, Vector3 eulerAngles, Vector3 scale)
|
{
|
if (transform != null && parent != null)
|
{
|
transform.SetParent(parent);
|
transform.localPosition = localPosition;
|
transform.localEulerAngles = eulerAngles;
|
transform.localScale = scale;
|
}
|
}
|
|
public static T[] GetComponentsInChildren<T>(this Transform transform, bool includeInactive, bool includeSelf) where T : Component
|
{
|
|
if (includeSelf)
|
{
|
return transform.GetComponentsInChildren<T>(includeInactive);
|
}
|
else
|
{
|
int childCount = transform.childCount;
|
List<T> list = new List<T>();
|
T t = null;
|
for (int i = 0; i < childCount; i++)
|
{
|
t = transform.GetComponent<T>();
|
if (t != null)
|
{
|
list.Add(t);
|
}
|
}
|
return list.ToArray();
|
}
|
|
}
|
|
|
public static Transform GetChildTransformDeeply(this Transform transform, string childName, bool includeSelf = false)
|
{
|
|
if (includeSelf)
|
{
|
if (transform.name.Equals(childName))
|
{
|
return transform;
|
}
|
}
|
|
int _count = transform.childCount;
|
|
Transform _tempChild = null;
|
|
for (int i = 0; i < _count; ++i)
|
{
|
|
_tempChild = transform.GetChild(i);
|
|
if (_tempChild.name.Equals(childName))
|
{
|
return _tempChild;
|
}
|
|
_tempChild = transform.GetChild(i).GetChildTransformDeeply(childName, false);
|
if (_tempChild)
|
{
|
return _tempChild;
|
}
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 以锚四个角的方式进行匹配
|
/// 并且将对象设置为父对象
|
/// </summary>
|
/// <param name="_child"></param>
|
/// <param name="_parent"></param>
|
|
public static void MatchWhith(this RectTransform _child, RectTransform _parent)
|
{
|
|
if (_child.parent != _parent)
|
{
|
_child.SetParent(_parent);
|
}
|
_child.anchoredPosition3D = Vector3.zero;
|
_child.sizeDelta = Vector2.zero;
|
_child.anchorMin = Vector2.zero;
|
_child.anchorMax = Vector2.one;
|
_child.pivot = Vector2.one * 0.5f;
|
_child.localRotation = Quaternion.identity;
|
_child.localScale = Vector3.one;
|
}
|
|
|
public static bool ContainWorldPosition(this RectTransform _rectTransform, Vector3 _worldPosition)
|
{
|
var worldCorners = new Vector3[4];
|
_rectTransform.GetWorldCorners(worldCorners);
|
if (_worldPosition.x >= worldCorners[0].x && _worldPosition.x <= worldCorners[2].x
|
&& _worldPosition.y >= worldCorners[0].y && _worldPosition.y <= worldCorners[2].y)
|
{
|
return true;
|
}
|
|
return false;
|
}
|
|
|
public static bool RectTransformContain(this RectTransform _rectTransform, RectTransform _target)
|
{
|
var targetWorldCorners = new Vector3[4];
|
_target.GetWorldCorners(targetWorldCorners);
|
|
for (int i = 0; i < targetWorldCorners.Length; i++)
|
{
|
var position = targetWorldCorners[i];
|
if (_rectTransform.ContainWorldPosition(position))
|
{
|
return true;
|
}
|
}
|
|
return false;
|
}
|
|
|
public static void SetPosition(this Transform transform, float x, float y, float z, bool isLocal = false)
|
{
|
if (transform == null)
|
{
|
return;
|
}
|
|
if (isLocal)
|
{
|
transform.localPosition = new Vector3(x, y, z);
|
}
|
else
|
{
|
transform.position = new Vector3(x, y, z);
|
}
|
}
|
|
public static Transform GetRoot(this Transform transform)
|
{
|
return transform && transform.parent ? GetRoot(transform.parent) : transform;
|
}
|
|
}
|