TransformExtension

作者: 2b75747cf703 | 来源:发表于2016-06-02 12:14 被阅读182次
using UnityEngine;
using System.Collections.Generic;
using System;

namespace Babybus.Framework.ExtensionMethods
{
    public static class TransformExtension
    {
        public static int GetActiveChildCount(this Transform transform)
        {
            int count = 0;
            foreach (Transform child in transform)
            {
                if (child.gameObject.activeSelf)
                    count++;
            }

            return count;
        }

        public static T[] GetComponentsInFirstHierarchyChildren<T>(this Transform transform, bool includeInactive = true) where T : Component
        {
            List<T> components = new List<T>();
            foreach (Transform child in transform)
            {
                if (!includeInactive && !child.gameObject.activeSelf)
                    continue;

                T component = child.GetComponent<T>();
                if (component != null)
                    components.Add(component);
            }

            return components.ToArray();
        }

        public static void SetX(this Transform transform, float x)
        {
            Vector3 newPosition = new Vector3(x, transform.position.y, transform.position.z);

            transform.position = newPosition;
        }

        public static void SetY(this Transform transform, float y)
        {
            Vector3 newPosition = new Vector3(transform.position.x, y, transform.position.z);

            transform.position = newPosition;
        }

        public static void SetZ(this Transform transform, float z)
        {
            Vector3 newPosition = new Vector3(transform.position.x, transform.position.y, z);

            transform.position = newPosition;
        }

        public static void SetXY(this Transform transform, Vector3 position)
        {
            transform.position = new Vector3(position.x, position.y, transform.position.z);
        }

        public static void SetXZ(this Transform transform, Vector3 position)
        {
            transform.position = new Vector3(position.x, transform.position.y, position.z);
        }

        public static void SetLocalX(this Transform transform, float x)
        {
            Vector3 newPosition = new Vector3(x, transform.localPosition.y, transform.localPosition.z);

            transform.localPosition = newPosition;
        }

        public static void SetLocalY(this Transform transform, float y)
        {
            Vector3 newPosition = new Vector3(transform.localPosition.x, y, transform.localPosition.z);

            transform.localPosition = newPosition;
        }

        public static void SetLocalZ(this Transform transform, float z)
        {
            Vector3 newPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, z);

            transform.localPosition = newPosition;
        }

        public static void SetLocalAngleX(this Transform transform, float x)
        {
            transform.localEulerAngles = new Vector3(x, transform.localEulerAngles.y, transform.localEulerAngles.z);
        }

        public static void SetLocalAngleY(this Transform transform, float y)
        {
            transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, y, transform.localEulerAngles.z);
        }

        public static void SetLocalAngleZ(this Transform transform, float z)
        {
            transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, z);
        }

        public static string GetPath(this Transform transform)
        {
            string path = transform.name;

            while (transform.parent != null)
            {
                transform = transform.parent;
                path = transform.name + "/" + path;
            }

            return path;
        }

        public static int IndexInParent(this Transform transform)
        {
            if (transform.parent == null)
                return -1;

            for (int i = 0; i < transform.parent.childCount; i++)
            {
                if (transform.parent.GetChild(i) == transform)
                    return i;
            }

            return -1;
        }

        public static void SetActiveInChildren(this Transform transform, bool value)
        {
            for (int i = 0; i < transform.childCount; i++)
            {
                transform.GetChild(i).gameObject.SetActive(value);
            }
        }

        public static void SetLocalScaleX(this Transform transform, float x)
        {
            Vector3 newScale = new Vector3(x, transform.localScale.y, transform.localScale.z);
            transform.localScale = newScale;
        }
        public static void SetLocalScaleY(this Transform transform, float y)
        {
            Vector3 newScale = new Vector3(transform.localScale.x, y, transform.localScale.z);
            transform.localScale = newScale;
        }
        public static void SetLocalScaleZ(this Transform transform, float z)
        {
            Vector3 newScale = new Vector3(transform.localScale.x, transform.localScale.y, z);
            transform.localScale = newScale;
        }

        public static bool EqualsInHierarchy(this Transform transform, Transform other)
        {
            if (transform.childCount != other.childCount)
                return false;

            for (int i = 0; i < transform.childCount; i++)
            {
                if (transform.GetChild(i).name != other.GetChild(i).name)
                    return false;
                else if (!EqualsInHierarchy(transform.GetChild(i), other.GetChild(i)))
                    return false;
            }

            return true;
        }

        public static void DestroyChildren(this Transform transform)
        {
            for (int i = 0; i < transform.childCount; i++)
                UnityEngine.Object.Destroy(transform.GetChild(i).gameObject);
        }

        public static T GetComponentInChildrenWithName<T>(this Transform transform, string name) where T : Component
        {
            var array = transform.GetComponentsInChildren<T>();
            return Array.Find(array, (item) =>
            {
                return item.name == name;
            });
        }

        public static void SetChildrenLayer(this Transform transform, Transform transforms, LayerMask layer)
        {
            foreach (Transform childTransform in transform)
            {
                childTransform.gameObject.layer = layer;
                childTransform.SetChildrenLayer(childTransform, layer);
            }
        }
    }
}

相关文章

网友评论

    本文标题:TransformExtension

    本文链接:https://www.haomeiwen.com/subject/uxhkdttx.html