u3d 两个同样obj查找子物体

xiaoxiao2021-02-28  103

using UnityEngine; using System.Collections; using System.Collections.Generic; using DG.Tweening; public class Test : MonoBehaviour { public GameObject m_tar; public GameObject m_tarShadow; Vector3 m_tarPos = Vector3.zero; Quaternion m_tarQua = Quaternion.identity; Dictionary<Transform, Vector3> m_mapPosReset = new Dictionary<Transform, Vector3>(); Dictionary<Transform, Quaternion> m_mapQuaReset = new Dictionary<Transform, Quaternion>(); Dictionary<Transform, Transform> m_mapTrans = new Dictionary<Transform, Transform>(); // Use this for initialization void Start () { DOTween.Init(); ChildPosInit2(); } // Update is called once per frame void Update () { } void ChildPosInit() { m_tarPos = m_tar.transform.position; m_tarQua = m_tar.transform.rotation; foreach (var render in m_tar.GetComponentsInChildren<Transform>()) { m_mapPosReset[render.transform] = render.transform.position; m_mapQuaReset[render.transform] = render.transform.rotation; } } public void ChildPosResetV1() { m_tar.transform.DOMove(m_tarPos, 0.5f); m_tar.transform.DORotate(m_tarQua.eulerAngles, 0.5f); foreach (var it in m_mapPosReset) { it.Key.DOMove(it.Value, 0.5f); } foreach (var it in m_mapQuaReset) { it.Key.DORotate(it.Value.eulerAngles, 0.5f); } } public void ChildPosReset() { foreach (var it in m_mapTrans) { it.Key.DOMove(it.Value.transform.position, 0.5f); it.Key.DORotate(it.Value.eulerAngles, 0.5f); } } void ChildPosInit2() { foreach (var it in m_tar.GetComponentsInChildren<Transform>()) { if (it != m_tar.transform) { string path = GetParName(it.transform); Debug.Log(path); m_mapTrans[it.transform] = m_tarShadow.transform.FindChild(path); } } } string GetParName(Transform tran) { if (tran.parent == m_tar.transform) { return tran.name; } else { return GetParName(tran.parent) + "/" + tran.name; } } }

注意:子物体不能重名

转载请注明原文地址: https://www.6miu.com/read-63738.html

最新回复(0)