Пример #1
0
        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);
        }
Пример #2
0
        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?
        }
Пример #3
0
        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];
                    }
                }
            }
        }