exSprite.ForceUpdateMesh C# (CSharp) Method

ForceUpdateMesh() public method

public ForceUpdateMesh ( Mesh _mesh ) : void
_mesh Mesh
return void
    public void ForceUpdateMesh( Mesh _mesh )
    {
        // pre check mesh
        if ( _mesh == null )
            return;

        _mesh.Clear();
        updateFlags = UpdateFlags.Vertex | UpdateFlags.UV | UpdateFlags.Color | UpdateFlags.Index;
        UpdateMesh( _mesh );
    }

Usage Example

Example #1
0
    // ------------------------------------------------------------------
    /// \param _sprite the sprite
    /// \param _texture the raw texture used in the sprite
    /// build the sprite by texture
    // ------------------------------------------------------------------

    public static void Build(this exSprite _sprite, Texture2D _texture = null)
    {
#if UNITY_3_4
        bool isPrefab = (EditorUtility.GetPrefabType(_sprite) == PrefabType.Prefab);
#else
        bool isPrefab = (PrefabUtility.GetPrefabType(_sprite) == PrefabType.Prefab);
#endif
        EditorUtility.SetDirty(_sprite);

        //
        if (_sprite.atlas == null && _texture == null)
        {
            _sprite.clippingPlane = null;
            GameObject.DestroyImmediate(_sprite.meshFilter.sharedMesh, true);
            _sprite.meshFilter.sharedMesh   = null;
            _sprite.renderer.sharedMaterial = null;
            return;
        }

        exClipping clipping = _sprite.clippingPlane;
        if (clipping != null)
        {
            clipping.RemovePlane(_sprite);
        }

        // set a texture to it
        if (_sprite.atlas != null)
        {
            _sprite.renderer.sharedMaterial = _sprite.atlas.material;
        }
        else if (_texture != null)
        {
            _sprite.renderer.sharedMaterial = exEditorHelper.GetDefaultMaterial(_texture, _texture.name);
        }
        EditorUtility.UnloadUnusedAssets();

        //
        if (_sprite.useAtlas == false && _sprite.customSize == false && _sprite.trimTexture == false)
        {
            _sprite.width  = _texture.width;
            _sprite.height = _texture.height;
        }

        // prefab do not need rebuild mesh
        if (isPrefab == false)
        {
            // NOTE: it is possible user duplicate an GameObject,
            //       if we directly change the mesh, the original one will changed either.
            Mesh newMesh = new Mesh();
            newMesh.hideFlags = HideFlags.DontSave;
            newMesh.Clear();

            // build vertices, normals, uvs and colors.
            _sprite.ForceUpdateMesh(newMesh);

            // set the new mesh in MeshFilter
            GameObject.DestroyImmediate(_sprite.meshFilter.sharedMesh, true);   // delete old mesh (to avoid leaking)
            _sprite.meshFilter.sharedMesh = newMesh;
        }

        // update collider
        if (_sprite.collisionHelper)
        {
            _sprite.collisionHelper.UpdateCollider();
        }

        //
        if (clipping != null)
        {
            clipping.AddPlaneInEditor(_sprite);
        }
    }