protected override void UpdateMeshData(bool forceUpdate = false) { if (meshRenderer == null || meshFilter == null || IsPartOfStaticBatch) { return; } if (gameSpriteRenderer != null && (gameSpriteRenderer != _oldGameSpriteRenderer || forceUpdate || _oldUnitySprite != null && _oldUnitySprite.sprite != null && _oldUnitySprite.sprite != sprite || _oldCustomSprite != null && _oldCustomSprite.sprite != null && _oldCustomSprite.sprite != sprite)) { _oldGameSpriteRenderer = gameSpriteRenderer; _oldCustomSprite = gameSpriteRenderer.GetComponent <CustomSprite>(); if (_oldCustomSprite != null) { sprite = _oldCustomSprite.sprite; } else { _oldUnitySprite = gameSpriteRenderer.GetComponent <SpriteRenderer>(); if (_oldUnitySprite != null) { sprite = _oldUnitySprite.sprite; } } material.EnableKeyword("NORMAL_TEXCOORD"); } if (_oldSecondaryColor != additiveColor || forceUpdate) { UpdateSecondaryColor(); isMeshDirty = true; _oldSecondaryColor = additiveColor; } base.UpdateMeshData(forceUpdate); }
protected override void UpdateMeshData(bool forceUpdate = false) { if (_meshRenderer == null || _meshFilter == null || IsPartOfStaticBatch) { return; } if (GameSpriteRenderer != null && (GameSpriteRenderer != _oldGameSpriteRenderer || forceUpdate || (_oldUnitySprite != null && _oldUnitySprite.sprite != null && _oldUnitySprite.sprite != Sprite) || (_oldCustomSprite != null && _oldCustomSprite.Sprite != null && _oldCustomSprite.Sprite != Sprite))) { _oldGameSpriteRenderer = GameSpriteRenderer; _oldCustomSprite = GameSpriteRenderer.GetComponent <CustomSprite>(); if (_oldCustomSprite != null) { Sprite = _oldCustomSprite.Sprite; } else { _oldUnitySprite = GameSpriteRenderer.GetComponent <SpriteRenderer>(); if (_oldUnitySprite != null) { Sprite = _oldUnitySprite.sprite; } } } if (_oldSecondaryColor != AdditiveColor || forceUpdate) { UpdateSecondaryColor(); _oldSecondaryColor = AdditiveColor; _isMeshDirty = true; } base.UpdateMeshData(forceUpdate); }
void Refresh() { if (_parentMeshFilter == null || _parentMeshFilter == null || _meshRenderer == null || _meshFilter == null || _parentMeshFilter.sharedMesh == null || _parentMeshRenderer.sharedMaterial == null) { if (_meshRenderer != null) { _meshRenderer.enabled = false; } return; } bool dirty = false; if (_parentMeshFilter.mesh != _oldParentMesh) { if (_meshFilter.mesh != null) { Destroy(_meshFilter.mesh); } _meshFilter.mesh = Instantiate(_parentMeshFilter.sharedMesh); _meshFilter.mesh.MarkDynamic(); if (_meshFilter.mesh.tangents == null) { Vector4[] tangents = new Vector4[_meshFilter.mesh.vertexCount]; for (int i = 0; i < tangents.Length; i++) { tangents[i] = new Vector4(1, 0); } _meshFilter.mesh.tangents = tangents; } _oldParentMesh = _parentMeshFilter.sharedMesh; dirty = true; } if (_oldMaterial != _parentMeshRenderer.sharedMaterial || (_oldMaterial != null && _parentMeshRenderer.sharedMaterial != null && _oldMaterial.mainTexture != _parentMeshRenderer.sharedMaterial.mainTexture)) { if (_meshRenderer.sharedMaterial != null && _materialKey != null) { CustomSprite.ReleaseMaterial(_materialKey); } Material baseMat = material == null ? _parentMeshRenderer.sharedMaterial : material; Texture2D tex = _parentMeshRenderer.sharedMaterial.mainTexture as Texture2D; _meshRenderer.sharedMaterial = CustomSprite.GetOrCreateMaterial(baseMat, tex, out _materialKey); _oldMaterial = _parentMeshRenderer.sharedMaterial; } if (!multiplicativeColor.Equals(_oldMulColor) || additiveColor != _oldAddColor || dirty) { Color32[] colors = _meshFilter.mesh.colors32; if (colors == null || colors.Length != _meshFilter.mesh.vertexCount) { colors = new Color32[_meshFilter.mesh.vertexCount]; } for (int i = 0; i < colors.Length; i++) { colors[i] = multiplicativeColor; } _meshFilter.mesh.colors32 = colors; Vector2 uv1 = new Vector2( Util.DecodeFloatRgba((Vector4)additiveColor), Util.DecodeFloatRgba(new Vector4(additiveColor.a, 0, 0))); Vector2[] uv1Arr = _meshFilter.mesh.uv2; if (uv1Arr == null || uv1Arr.Length != colors.Length) { uv1Arr = new Vector2[colors.Length]; } for (int i = 0; i < uv1Arr.Length; i++) { uv1Arr[i] = uv1; } _meshFilter.mesh.uv2 = uv1Arr; _oldMulColor = multiplicativeColor; _oldAddColor = additiveColor; } }
public void Refresh() { /* * if (_parentMeshFilter == null || _parentMeshFilter == null || _meshRenderer == null || _meshFilter == null || * _parentMeshFilter.sharedMesh == null || _parentMeshRenderer.sharedMaterial == null) * { * if (_meshRenderer != null) * _meshRenderer.enabled = false; * return; * } */ bool dirty = false; if (_parentMeshFilter.mesh != _oldParentMesh) { if (_meshFilter.mesh != null) { Destroy(_meshFilter.mesh); } _meshFilter.mesh = _parentMeshFilter.sharedMesh; _meshFilter.mesh.MarkDynamic(); if (_meshFilter.mesh.tangents == null) { var tangents = new Vector4[_meshFilter.mesh.vertexCount]; for (int i = 0; i < tangents.Length; i++) { tangents[i] = new Vector4(1, 0); } _meshFilter.mesh.tangents = tangents; } _oldParentMesh = _parentMeshFilter.sharedMesh; dirty = true; } if (_oldMaterial != _parentMeshRenderer.sharedMaterial || (_oldMaterial != null && _parentMeshRenderer.sharedMaterial != null && _oldMaterial.mainTexture != _parentMeshRenderer.sharedMaterial.mainTexture)) { if (_meshRenderer.sharedMaterial != null && _materialKey != null) { CustomSprite.ReleaseMaterial(_materialKey); } var baseMat = Material == null ? _parentMeshRenderer.sharedMaterial : Material; var tex = _parentMeshRenderer.sharedMaterial.mainTexture as Texture2D; _meshRenderer.sharedMaterial = CustomSprite.GetOrCreateMaterial(baseMat, tex, out _materialKey); _oldMaterial = _parentMeshRenderer.sharedMaterial; } if (!MultiplicativeColor.Equals(_oldMulColor) || AdditiveColor != _oldAddColor || dirty) { var colors = _meshFilter.mesh.colors32; if (colors == null || colors.Length != _meshFilter.mesh.vertexCount) { colors = new Color32[_meshFilter.mesh.vertexCount]; } for (int i = 0; i < colors.Length; i++) { colors[i] = MultiplicativeColor; } _meshFilter.mesh.colors32 = colors; var uv1 = new Vector2( Util.DecodeFloatRGBA((Vector4)AdditiveColor), Util.DecodeFloatRGBA(new Vector4(AdditiveColor.a, 0, 0))); var uv1Arr = _meshFilter.mesh.uv2; if (uv1Arr == null || uv1Arr.Length != colors.Length) { uv1Arr = new Vector2[colors.Length]; } for (int i = 0; i < uv1Arr.Length; i++) { uv1Arr[i] = uv1; } _meshFilter.mesh.uv2 = uv1Arr; _oldMulColor = MultiplicativeColor; _oldAddColor = AdditiveColor; } }