public void CopyComponent(ReplacementPreferences replacementPreferences, Component original, GameObject newObject) { Transform oldTransform = (Transform)original; if (replacementPreferences.applyRotation) { newObject.transform.localRotation = oldTransform.localRotation; } if (replacementPreferences.applyScale) { newObject.transform.localScale = oldTransform.localScale; } if (!replacementPreferences.renameObjects) { newObject.transform.name = oldTransform.name; } if (!replacementPreferences.orderHierarchyToPreview) { newObject.transform.SetSiblingIndex(oldTransform.GetSiblingIndex()); } defaultComponentCopier.CopyComponent(replacementPreferences, original, newObject); }
public void CopyComponent(ReplacementPreferences replacementPreferences, Component original, GameObject newObject) { System.Type type = original.GetType(); ISet <string> partAvoiders = componentPartAvoiders.ContainsKey(type) ? componentPartAvoiders[type] : null; var dst = newObject.GetComponent(type); if (!dst) { dst = newObject.AddComponent(type); } var fields = type.GetFields(); foreach (var field in fields) { if (field.IsStatic) { continue; } if (partAvoiders != null && partAvoiders.Contains(field.Name)) { continue; } field.SetValue(dst, field.GetValue(original)); } var props = type.GetProperties(); foreach (var prop in props) { if (!prop.CanWrite || prop.Name == "name" || prop.Name == "parent") { continue; } if (partAvoiders != null && partAvoiders.Contains(prop.Name)) { continue; } prop.SetValue(dst, prop.GetValue(original)); } // NOTE: Some properties are references to other things and a prefab replacement can break them. // TODO: Should we record any reference types in order to map them to new references later? }
public void CopyComponent(ReplacementPreferences replacementPreferences, Component original, GameObject newObject) { SkinnedMeshRenderer meshRenderer = (SkinnedMeshRenderer)original; SkinnedMeshRenderer newMeshRenderer = newObject.GetComponent <SkinnedMeshRenderer>(); // QUESTION Should we instantiate one if one is not present? if (newMeshRenderer) { if (meshRenderer.sharedMaterials.Length == newMeshRenderer.sharedMaterials.Length) { Material[] CacheMaterials = new Material[meshRenderer.sharedMaterials.Length]; for (int a = 0; a < meshRenderer.sharedMaterials.Length; a++) { CacheMaterials[a] = meshRenderer.sharedMaterials[a]; } for (int b = 0; b < CacheMaterials.Length; b++) { newMeshRenderer.sharedMaterials[b] = CacheMaterials[b]; } } } }