Example #1
0
    // Save Mesh resources
    private void BreakResourcesConnection()
    {
        // Replace the prefab default material by a copy of the source instance (this sprite from wich the prefab has just been create) if the material is not persistent
        Material rGeneratedMaterialInstance = SpriteData.generatedMaterial;

        if (rGeneratedMaterialInstance != null)
        {
            Uni2DSprite rSpritePrefab   = PrefabUtility.GetPrefabParent(this) as Uni2DSprite;
            Material    rPrefabMaterial = rSpritePrefab.SpriteData.generatedMaterial;

            // If prefab material isn't created yet wait for it
            if (rPrefabMaterial == null)
            {
                return;
            }

            rPrefabMaterial.shader = rGeneratedMaterialInstance.shader;
            rPrefabMaterial.CopyPropertiesFromMaterial(rGeneratedMaterialInstance);
        }

        //Debug.Log("Break Resources");
        Uni2DEditorResourceCopyUtils.DuplicateResources(this, true);

        PrefabUtility.DisconnectPrefabInstance(gameObject);
    }
Example #2
0
    // Awake
    private void Awake()
    {
#if UNITY_EDITOR
        if (Application.isPlaying)
#endif
        {
            m_rCurrentFrameAtlas            = m_rSpriteSettings.atlas;
            m_rCurrentFrameTextureContainer = m_rSpriteSettings.textureContainer;
            m_iCurrentFrameTextureWidth     = (int)m_rSpriteData.spriteWidth;
            m_iCurrentFrameTextureHeight    = (int)m_rSpriteData.spriteHeight;
            spriteAnimation.Start(this);
        }

#if UNITY_EDITOR
        // Is a prefab instance
        else if (IsADuplicate( ))
        {
            //Debug.Log("Duplicate");
            Uni2DEditorResourceCopyUtils.DuplicateResources(this);
        }
#endif

        // Create the duplicata marker if needed
        if (m_oDuplicataMarker == null || m_oDuplicataMarker.IsADuplicate(this))
        {
            m_oDuplicataMarker = ScriptableObject.CreateInstance <DuplicataMarker>();
            m_oDuplicataMarker.Create(this);
        }
    }
Example #3
0
    // Save Mesh resources
    public static void DuplicateResources(Uni2DSprite a_rSprite, bool a_bPrefab = false)
    {
        // Sprite mesh
        Mesh rSpriteMesh = a_rSprite.SpriteData.renderMesh;

        if (rSpriteMesh != null)
        {
            Mesh rDuplicatedMesh = Uni2DEditorResourceCopyUtils.DuplicateMesh(rSpriteMesh);

            MeshFilter          rMeshFilterComponent          = a_rSprite.GetComponent <MeshFilter>( );
            SkinnedMeshRenderer rSkinnedMeshRendererComponent = a_rSprite.GetComponent <SkinnedMeshRenderer>( );

            // Apply the new generated mesh to the mesh filter component
            // and save it as generated data
            if (rMeshFilterComponent != null)
            {
                rMeshFilterComponent.sharedMesh = rDuplicatedMesh;
                a_rSprite.SpriteData.renderMesh = rDuplicatedMesh;
            }

            if (rSkinnedMeshRendererComponent != null)
            {
                rSkinnedMeshRendererComponent.sharedMesh = rDuplicatedMesh;
            }
        }

        // Duplicate the generated material
        if (a_rSprite.SpriteData.generatedMaterial != null)
        {
            // Duplicate generated mesh
            a_rSprite.SpriteData.generatedMaterial = new Material(a_rSprite.SpriteData.generatedMaterial);

            // Change the render mesh material ref to the duplicate
            a_rSprite.SpriteData.renderMeshMaterial = a_rSprite.SpriteData.generatedMaterial;

            // Update the renderer material
            a_rSprite.GetComponent <Renderer>().sharedMaterial = a_rSprite.SpriteData.generatedMaterial;
        }

        // Mesh collider(s)
        List <Mesh>         rMeshCollidersList          = a_rSprite.SpriteData.meshCollidersList;
        List <MeshCollider> rMeshColliderComponentsList = a_rSprite.SpriteData.meshColliderComponentsList;

        for (int iMeshIndex = 0, iMeshCount = rMeshCollidersList.Count; iMeshIndex < iMeshCount; ++iMeshIndex)
        {
            Mesh         rDuplicatedMeshCollider = Uni2DEditorResourceCopyUtils.DuplicateMesh(rMeshCollidersList[iMeshIndex]);
            MeshCollider rMeshCollider           = rMeshColliderComponentsList[iMeshIndex];

            if (rMeshCollider != null)
            {
                rMeshCollider.sharedMesh = rDuplicatedMeshCollider;
            }
            rMeshCollidersList[iMeshIndex] = rDuplicatedMeshCollider;
        }

                #if UNITY_EDITOR
        EditorUtility.SetDirty(a_rSprite);
                #endif
    }
Example #4
0
 // Ensure Mesh Validity
 private bool EnsureMeshValidity(Mesh a_rSourceMesh, Mesh a_rUsedMesh, ref Mesh a_rPoseMesh, ref ReferenceContainer a_rRefManipulatedMesh)
 {
     if (a_rSourceMesh != null)
     {
         Object rManipulatedMesh = a_rRefManipulatedMesh.Reference;
         if (a_rPoseMesh == null || a_rPoseMesh != a_rSourceMesh || rManipulatedMesh == null || rManipulatedMesh != a_rUsedMesh)
         {
             a_rPoseMesh = a_rSourceMesh;
             if (rManipulatedMesh != null)
             {
                 DestroyImmediate(rManipulatedMesh);
             }
             a_rRefManipulatedMesh.Reference = Uni2DEditorResourceCopyUtils.DuplicateMesh(a_rPoseMesh);
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }