diff --git a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/CHANGELOG.md b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/CHANGELOG.md index 2e33567..4936d9c 100644 --- a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/CHANGELOG.md +++ b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [v0.9.1](https://github.com/mob-sakai/SoftMaskForUGUI/tree/v0.9.1) (2020-01-28) + +[Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.9.0...v0.9.1) + +**Implemented enhancements:** + +- Add the parameter to control mask transparency [\#62](https://github.com/mob-sakai/SoftMaskForUGUI/pull/62) ([IIzzaya](https://github.com/IIzzaya)) + +**Fixed bugs:** + +- Projection Matrix check always true when using world space canvas [\#67](https://github.com/mob-sakai/SoftMaskForUGUI/issues/67) +- Update softmask not working when canvas component was deactivated [\#66](https://github.com/mob-sakai/SoftMaskForUGUI/issues/66) +- Raycast coordinates are incorrect [\#52](https://github.com/mob-sakai/SoftMaskForUGUI/issues/52) + ## [v0.9.0](https://github.com/mob-sakai/SoftMaskForUGUI/tree/v0.9.0) (2019-08-27) [Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.8.1...v0.9.0) diff --git a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Scripts/SoftMask.cs b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Scripts/SoftMask.cs index fecb688..af94d4f 100755 --- a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Scripts/SoftMask.cs +++ b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Scripts/SoftMask.cs @@ -45,6 +45,8 @@ namespace Coffee.UIExtensions new Color(1, 1, 1, 0), }; + static bool s_UVStartsAtTop; + //################################ // Serialize Members. @@ -53,6 +55,8 @@ namespace Coffee.UIExtensions [SerializeField] DesamplingRate m_DesamplingRate = DesamplingRate.None; [Tooltip("The value used by the soft mask to select the area of influence defined over the soft mask's graphic.")] [SerializeField][Range(0.01f, 1)] float m_Softness = 1; + [Tooltip("The transparency of the whole masked graphic.")] + [SerializeField][Range(0f, 1f)] float m_Alpha = 1; [Tooltip("Should the soft mask ignore parent soft masks?")] [SerializeField] bool m_IgnoreParent = false; [Tooltip("Is the soft mask a part of parent soft mask?")] @@ -94,6 +98,23 @@ namespace Coffee.UIExtensions } } } + + /// + /// The transparency of the whole masked graphic. + /// + public float alpha + { + get { return m_Alpha; } + set + { + value = Mathf.Clamp01(value); + if (m_Alpha != value) + { + m_Alpha = value; + hasChanged = true; + } + } + } /// /// Should the soft mask ignore parent soft masks? @@ -240,7 +261,9 @@ namespace Coffee.UIExtensions } int x = (int)((softMaskBuffer.width - 1) * Mathf.Clamp01(sp.x / Screen.width)); - int y = (int)((softMaskBuffer.height - 1) * Mathf.Clamp01(sp.y / Screen.height)); + int y = s_UVStartsAtTop + ? (int)((softMaskBuffer.height - 1) * Mathf.Clamp01(sp.y / Screen.height)) + : (int)((softMaskBuffer.height - 1) * (1 - Mathf.Clamp01(sp.y / Screen.height))); return 0.5f < GetPixelValue(x, y, interactions); } @@ -263,6 +286,7 @@ namespace Coffee.UIExtensions // Register. if (s_ActiveSoftMasks.Count == 0) { + s_UVStartsAtTop = SystemInfo.graphicsUVStartsAtTop; Canvas.willRenderCanvases += UpdateMaskTextures; if (s_StencilCompId == 0) @@ -271,6 +295,7 @@ namespace Coffee.UIExtensions s_ColorMaskId = Shader.PropertyToID("_ColorMask"); s_MainTexId = Shader.PropertyToID("_MainTex"); s_SoftnessId = Shader.PropertyToID("_Softness"); + s_Alpha = Shader.PropertyToID("_Alpha"); } } s_ActiveSoftMasks.Add(this); @@ -378,6 +403,7 @@ namespace Coffee.UIExtensions static int s_ColorMaskId; static int s_MainTexId; static int s_SoftnessId; + static int s_Alpha; MaterialPropertyBlock _mpb; CommandBuffer _cb; Material _material; @@ -388,10 +414,8 @@ namespace Coffee.UIExtensions List _children = new List(); bool _hasChanged = false; bool _hasStencilStateChanged = false; -#if !UNITY_2018_1_OR_NEWER static readonly Dictionary s_previousViewProjectionMatrices = new Dictionary (); static readonly Dictionary s_nowViewProjectionMatrices = new Dictionary (); -#endif Material material { get { return _material ? _material : _material = new Material(s_SoftMaskShader ? s_SoftMaskShader : s_SoftMaskShader = Resources.Load("SoftMask")){ hideFlags = HideFlags.HideAndDontSave }; } } @@ -408,21 +432,23 @@ namespace Coffee.UIExtensions continue; var canvas = sm.graphic.canvas; + if(!canvas) + continue; + if (canvas.renderMode == RenderMode.WorldSpace) { var cam = canvas.worldCamera; - Matrix4x4 nowsVP = cam.projectionMatrix * cam.worldToCameraMatrix; + if(!cam) + continue; + + Matrix4x4 nowVP = cam.projectionMatrix * cam.worldToCameraMatrix; -#if UNITY_2018_1_OR_NEWER - Matrix4x4 previousVP = cam.previousViewProjectionMatrix; -#else Matrix4x4 previousVP = default(Matrix4x4); int id = cam.GetInstanceID (); s_previousViewProjectionMatrices.TryGetValue (id, out previousVP); - s_nowViewProjectionMatrices[id] = nowsVP; -#endif + s_nowViewProjectionMatrices[id] = nowVP; - if (previousVP != nowsVP) + if (previousVP != nowVP) { sm.hasChanged = true; } @@ -459,15 +485,12 @@ namespace Coffee.UIExtensions } } - -#if !UNITY_2018_1_OR_NEWER s_previousViewProjectionMatrices.Clear (); - foreach (int id in s_previousViewProjectionMatrices.Keys) + foreach (int id in s_nowViewProjectionMatrices.Keys) { s_previousViewProjectionMatrices [id] = s_nowViewProjectionMatrices [id]; } s_nowViewProjectionMatrices.Clear (); -#endif } /// @@ -539,6 +562,7 @@ namespace Coffee.UIExtensions sm.material.SetInt(s_ColorMaskId, (int)1 << (3 - _stencilDepth - i)); sm._mpb.SetTexture(s_MainTexId, sm.graphic.mainTexture); sm._mpb.SetFloat(s_SoftnessId, sm.m_Softness); + sm._mpb.SetFloat(s_Alpha, sm.m_Alpha); // Draw mesh. _cb.DrawMesh(sm.mesh, sm.transform.localToWorldMatrix, sm.material, 0, 0, sm._mpb); diff --git a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Shaders/Resources/SoftMask.shader b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Shaders/Resources/SoftMask.shader index ced2a86..a8988f0 100644 --- a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Shaders/Resources/SoftMask.shader +++ b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/Shaders/Resources/SoftMask.shader @@ -19,10 +19,11 @@ SubShader { sampler2D _MainTex; float _Softness; + float _Alpha; fixed4 frag (v2f_img i) : SV_Target { - return saturate(tex2D(_MainTex, i.uv).a/_Softness); + return saturate(tex2D(_MainTex, i.uv).a/_Softness) * _Alpha; } ENDCG } diff --git a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/package.json b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/package.json index a5cd789..c58cf8b 100644 --- a/Assets/Coffee/UIExtensions/SoftMaskForUGUI/package.json +++ b/Assets/Coffee/UIExtensions/SoftMaskForUGUI/package.json @@ -2,7 +2,7 @@ "name": "com.coffee.softmask-for-ugui", "displayName": "Soft Mask For uGUI", "description": "SoftMask is a smooth masking component for uGUI elements in Unity.\nBy using SoftMask instead of default Mask, rounded edges of UI elements can be expressed beautifully.", - "version": "0.9.0", + "version": "0.9.1", "unity": "2017.1", "license": "MIT", "repository": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e33567..4936d9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [v0.9.1](https://github.com/mob-sakai/SoftMaskForUGUI/tree/v0.9.1) (2020-01-28) + +[Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.9.0...v0.9.1) + +**Implemented enhancements:** + +- Add the parameter to control mask transparency [\#62](https://github.com/mob-sakai/SoftMaskForUGUI/pull/62) ([IIzzaya](https://github.com/IIzzaya)) + +**Fixed bugs:** + +- Projection Matrix check always true when using world space canvas [\#67](https://github.com/mob-sakai/SoftMaskForUGUI/issues/67) +- Update softmask not working when canvas component was deactivated [\#66](https://github.com/mob-sakai/SoftMaskForUGUI/issues/66) +- Raycast coordinates are incorrect [\#52](https://github.com/mob-sakai/SoftMaskForUGUI/issues/52) + ## [v0.9.0](https://github.com/mob-sakai/SoftMaskForUGUI/tree/v0.9.0) (2019-08-27) [Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.8.1...v0.9.0) diff --git a/package.json b/package.json index a5cd789..c58cf8b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "com.coffee.softmask-for-ugui", "displayName": "Soft Mask For uGUI", "description": "SoftMask is a smooth masking component for uGUI elements in Unity.\nBy using SoftMask instead of default Mask, rounded edges of UI elements can be expressed beautifully.", - "version": "0.9.0", + "version": "0.9.1", "unity": "2017.1", "license": "MIT", "repository": {