/// <summary> /// 获取所有子物体 并 记录信息 /// </summary> /// <param name="objs"></param> public void GetAll(GameObject objs) { for (int i = 0; i < objs.transform.childCount; i++) { GameObject temp = objs.transform.GetChild(i).gameObject; children.Add(temp); if (recordTransform) { positions.Add(temp.transform.localPosition); rotations.Add(temp.transform.localRotation); enable.Add(temp.activeSelf); scales.Add(temp.transform.localScale); } if (recordObjsInfo) { if (temp.GetComponent <MeshRenderer>()) { //通过图层过滤 if (objs.layer != 8) { int matsCount; #if UNITY_EDITOR matsCount = temp.GetComponent <MeshRenderer>().sharedMaterials.Length; #else matsCount = temp.GetComponent <MeshRenderer>().materials.Length; #endif objInfoClass tempObj = new objInfoClass(); tempObj.obj = temp; for (int j = 0; j < matsCount; j++) { MaterialClass tempMaterials = new MaterialClass(); #if UNITY_EDITOR tempMaterials.shader = temp.GetComponent <MeshRenderer>().sharedMaterials[j].shader; if (temp.GetComponent <MeshRenderer>().sharedMaterials[j].HasProperty("_Color")) { tempMaterials.color = temp.GetComponent <MeshRenderer>().sharedMaterials[j].color; } #else tempMaterials.shader = temp.GetComponent <MeshRenderer>().materials[j].shader; if (temp.GetComponent <MeshRenderer>().materials[j].HasProperty("_Color")) { tempMaterials.color = temp.GetComponent <MeshRenderer>().materials[j].color; } #endif tempObj.objMaterials.Add(tempMaterials); } objsInfo.Add(tempObj); } } } if (temp.transform.childCount > 0) { GetAll(temp); } } }
/// <summary> /// 获取当前物体及子物体 并 记录信息 /// </summary> /// <param name="objs"></param> public void GetAndRecordTransform(GameObject objs) { children.Add(objs); //记录 Transform 信息 if (recordTransform) { positions.Add(objs.transform.position); rotations.Add(objs.transform.rotation); enable.Add(objs.activeSelf); scales.Add(objs.transform.localScale); } if (recordObjsInfo) { if (objs.GetComponent <MeshRenderer>()) { //通过图层过滤物体 if (objs.layer != 8) { int matsCount = objs.GetComponent <MeshRenderer>().materials.Length; objInfoClass tempObj = new objInfoClass(); tempObj.obj = objs; for (int i = 0; i < matsCount; i++) { MaterialClass tempMatInfo = new MaterialClass(); tempMatInfo.shader = objs.GetComponent <MeshRenderer>().materials[i].shader; if (objs.GetComponent <MeshRenderer>().materials[i].HasProperty("_Color")) { tempMatInfo.color = objs.GetComponent <MeshRenderer>().materials[i].color; } tempObj.objMaterials.Add(tempMatInfo); } objsInfo.Add(tempObj); } } } // 递归 记录 obj 子物体信息 foreach (Transform child in objs.transform) { GetAndRecordTransform(child.gameObject); } }