release v0.9.1

pull/81/head
mob-sakai 2020-01-28 20:53:37 +09:00
commit 579330f269
6 changed files with 70 additions and 17 deletions

View File

@ -1,5 +1,19 @@
# Changelog # 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) ## [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) [Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.8.1...v0.9.0)

View File

@ -45,6 +45,8 @@ namespace Coffee.UIExtensions
new Color(1, 1, 1, 0), new Color(1, 1, 1, 0),
}; };
static bool s_UVStartsAtTop;
//################################ //################################
// Serialize Members. // Serialize Members.
@ -53,6 +55,8 @@ namespace Coffee.UIExtensions
[SerializeField] DesamplingRate m_DesamplingRate = DesamplingRate.None; [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.")] [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; [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?")] [Tooltip("Should the soft mask ignore parent soft masks?")]
[SerializeField] bool m_IgnoreParent = false; [SerializeField] bool m_IgnoreParent = false;
[Tooltip("Is the soft mask a part of parent soft mask?")] [Tooltip("Is the soft mask a part of parent soft mask?")]
@ -94,6 +98,23 @@ namespace Coffee.UIExtensions
} }
} }
} }
/// <summary>
/// The transparency of the whole masked graphic.
/// </summary>
public float alpha
{
get { return m_Alpha; }
set
{
value = Mathf.Clamp01(value);
if (m_Alpha != value)
{
m_Alpha = value;
hasChanged = true;
}
}
}
/// <summary> /// <summary>
/// Should the soft mask ignore parent soft masks? /// 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 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); return 0.5f < GetPixelValue(x, y, interactions);
} }
@ -263,6 +286,7 @@ namespace Coffee.UIExtensions
// Register. // Register.
if (s_ActiveSoftMasks.Count == 0) if (s_ActiveSoftMasks.Count == 0)
{ {
s_UVStartsAtTop = SystemInfo.graphicsUVStartsAtTop;
Canvas.willRenderCanvases += UpdateMaskTextures; Canvas.willRenderCanvases += UpdateMaskTextures;
if (s_StencilCompId == 0) if (s_StencilCompId == 0)
@ -271,6 +295,7 @@ namespace Coffee.UIExtensions
s_ColorMaskId = Shader.PropertyToID("_ColorMask"); s_ColorMaskId = Shader.PropertyToID("_ColorMask");
s_MainTexId = Shader.PropertyToID("_MainTex"); s_MainTexId = Shader.PropertyToID("_MainTex");
s_SoftnessId = Shader.PropertyToID("_Softness"); s_SoftnessId = Shader.PropertyToID("_Softness");
s_Alpha = Shader.PropertyToID("_Alpha");
} }
} }
s_ActiveSoftMasks.Add(this); s_ActiveSoftMasks.Add(this);
@ -378,6 +403,7 @@ namespace Coffee.UIExtensions
static int s_ColorMaskId; static int s_ColorMaskId;
static int s_MainTexId; static int s_MainTexId;
static int s_SoftnessId; static int s_SoftnessId;
static int s_Alpha;
MaterialPropertyBlock _mpb; MaterialPropertyBlock _mpb;
CommandBuffer _cb; CommandBuffer _cb;
Material _material; Material _material;
@ -388,10 +414,8 @@ namespace Coffee.UIExtensions
List<SoftMask> _children = new List<SoftMask>(); List<SoftMask> _children = new List<SoftMask>();
bool _hasChanged = false; bool _hasChanged = false;
bool _hasStencilStateChanged = false; bool _hasStencilStateChanged = false;
#if !UNITY_2018_1_OR_NEWER
static readonly Dictionary<int, Matrix4x4> s_previousViewProjectionMatrices = new Dictionary<int, Matrix4x4> (); static readonly Dictionary<int, Matrix4x4> s_previousViewProjectionMatrices = new Dictionary<int, Matrix4x4> ();
static readonly Dictionary<int, Matrix4x4> s_nowViewProjectionMatrices = new Dictionary<int, Matrix4x4> (); static readonly Dictionary<int, Matrix4x4> s_nowViewProjectionMatrices = new Dictionary<int, Matrix4x4> ();
#endif
Material material { get { return _material ? _material : _material = new Material(s_SoftMaskShader ? s_SoftMaskShader : s_SoftMaskShader = Resources.Load<Shader>("SoftMask")){ hideFlags = HideFlags.HideAndDontSave }; } } Material material { get { return _material ? _material : _material = new Material(s_SoftMaskShader ? s_SoftMaskShader : s_SoftMaskShader = Resources.Load<Shader>("SoftMask")){ hideFlags = HideFlags.HideAndDontSave }; } }
@ -408,21 +432,23 @@ namespace Coffee.UIExtensions
continue; continue;
var canvas = sm.graphic.canvas; var canvas = sm.graphic.canvas;
if(!canvas)
continue;
if (canvas.renderMode == RenderMode.WorldSpace) if (canvas.renderMode == RenderMode.WorldSpace)
{ {
var cam = canvas.worldCamera; 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); Matrix4x4 previousVP = default(Matrix4x4);
int id = cam.GetInstanceID (); int id = cam.GetInstanceID ();
s_previousViewProjectionMatrices.TryGetValue (id, out previousVP); s_previousViewProjectionMatrices.TryGetValue (id, out previousVP);
s_nowViewProjectionMatrices[id] = nowsVP; s_nowViewProjectionMatrices[id] = nowVP;
#endif
if (previousVP != nowsVP) if (previousVP != nowVP)
{ {
sm.hasChanged = true; sm.hasChanged = true;
} }
@ -459,15 +485,12 @@ namespace Coffee.UIExtensions
} }
} }
#if !UNITY_2018_1_OR_NEWER
s_previousViewProjectionMatrices.Clear (); s_previousViewProjectionMatrices.Clear ();
foreach (int id in s_previousViewProjectionMatrices.Keys) foreach (int id in s_nowViewProjectionMatrices.Keys)
{ {
s_previousViewProjectionMatrices [id] = s_nowViewProjectionMatrices [id]; s_previousViewProjectionMatrices [id] = s_nowViewProjectionMatrices [id];
} }
s_nowViewProjectionMatrices.Clear (); s_nowViewProjectionMatrices.Clear ();
#endif
} }
/// <summary> /// <summary>
@ -539,6 +562,7 @@ namespace Coffee.UIExtensions
sm.material.SetInt(s_ColorMaskId, (int)1 << (3 - _stencilDepth - i)); sm.material.SetInt(s_ColorMaskId, (int)1 << (3 - _stencilDepth - i));
sm._mpb.SetTexture(s_MainTexId, sm.graphic.mainTexture); sm._mpb.SetTexture(s_MainTexId, sm.graphic.mainTexture);
sm._mpb.SetFloat(s_SoftnessId, sm.m_Softness); sm._mpb.SetFloat(s_SoftnessId, sm.m_Softness);
sm._mpb.SetFloat(s_Alpha, sm.m_Alpha);
// Draw mesh. // Draw mesh.
_cb.DrawMesh(sm.mesh, sm.transform.localToWorldMatrix, sm.material, 0, 0, sm._mpb); _cb.DrawMesh(sm.mesh, sm.transform.localToWorldMatrix, sm.material, 0, 0, sm._mpb);

View File

@ -19,10 +19,11 @@ SubShader {
sampler2D _MainTex; sampler2D _MainTex;
float _Softness; float _Softness;
float _Alpha;
fixed4 frag (v2f_img i) : SV_Target 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 ENDCG
} }

View File

@ -2,7 +2,7 @@
"name": "com.coffee.softmask-for-ugui", "name": "com.coffee.softmask-for-ugui",
"displayName": "Soft Mask 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.", "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", "unity": "2017.1",
"license": "MIT", "license": "MIT",
"repository": { "repository": {

View File

@ -1,5 +1,19 @@
# Changelog # 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) ## [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) [Full Changelog](https://github.com/mob-sakai/SoftMaskForUGUI/compare/v0.8.1...v0.9.0)

View File

@ -2,7 +2,7 @@
"name": "com.coffee.softmask-for-ugui", "name": "com.coffee.softmask-for-ugui",
"displayName": "Soft Mask 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.", "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", "unity": "2017.1",
"license": "MIT", "license": "MIT",
"repository": { "repository": {