Fixed and tested HSS & VSS use with Scroll COnflict Manager.
HSS & VSS controls now play nicely together Added new version of Gradient --HG-- branch : develop_5.3release
parent
1730965a44
commit
76e5049023
|
@ -133,8 +133,12 @@ namespace UnityEngine.UI.Extensions
|
|||
var go = DefaultControls.CreateImage(resources);
|
||||
go.layer = gameObject.layer;
|
||||
var rt = go.transform as RectTransform;
|
||||
|
||||
if (rt)
|
||||
{
|
||||
rt.anchorMin = new Vector2(0, 1);
|
||||
rt.anchorMax = new Vector2(0, 1);
|
||||
rt.pivot = new Vector2(0.5f, 0.5f);
|
||||
rt.SetParent(rectTransform);
|
||||
rt.localPosition = Vector3.zero;
|
||||
rt.localRotation = Quaternion.identity;
|
||||
|
@ -146,6 +150,7 @@ namespace UnityEngine.UI.Extensions
|
|||
var spriteName = match.Groups[1].Value;
|
||||
//var size = float.Parse(match.Groups[2].Value);
|
||||
var img = m_ImagesPool[m_ImagesVertexIndex.Count - 1];
|
||||
|
||||
if (img.sprite == null || img.sprite.name != spriteName)
|
||||
{
|
||||
// img.sprite = Resources.Load<Sprite>(spriteName);
|
||||
|
@ -181,7 +186,8 @@ namespace UnityEngine.UI.Extensions
|
|||
m_ImagesPool.Remove(m_ImagesPool[i]);
|
||||
}
|
||||
}
|
||||
if (culled_ImagesPool.Count > 1) {
|
||||
if (culled_ImagesPool.Count > 1)
|
||||
{
|
||||
clearImages = true;
|
||||
}
|
||||
}
|
||||
|
@ -195,11 +201,13 @@ namespace UnityEngine.UI.Extensions
|
|||
positions.Clear();
|
||||
|
||||
UIVertex vert = new UIVertex();
|
||||
|
||||
for (var i = 0; i < m_ImagesVertexIndex.Count; i++)
|
||||
{
|
||||
var endIndex = m_ImagesVertexIndex[i];
|
||||
var rt = m_ImagesPool[i].rectTransform;
|
||||
var size = rt.sizeDelta;
|
||||
|
||||
if (endIndex < toFill.currentVertCount)
|
||||
{
|
||||
toFill.PopulateUIVertex(ref vert, endIndex);
|
||||
|
@ -207,7 +215,9 @@ namespace UnityEngine.UI.Extensions
|
|||
|
||||
// Erase the lower left corner of the black specks
|
||||
toFill.PopulateUIVertex(ref vert, endIndex - 3);
|
||||
|
||||
var pos = vert.position;
|
||||
|
||||
for (int j = endIndex, m = endIndex - 3; j > m; j--)
|
||||
{
|
||||
toFill.PopulateUIVertex(ref vert, endIndex);
|
||||
|
@ -233,8 +243,10 @@ namespace UnityEngine.UI.Extensions
|
|||
|
||||
// Hyperlink inside the text is added to surround the vertex index coordinate frame
|
||||
toFill.PopulateUIVertex(ref vert, hrefInfo.startIndex);
|
||||
|
||||
var pos = vert.position;
|
||||
var bounds = new Bounds(pos, Vector3.zero);
|
||||
|
||||
for (int i = hrefInfo.startIndex, m = hrefInfo.endIndex; i < m; i++)
|
||||
{
|
||||
if (i >= toFill.currentVertCount)
|
||||
|
@ -311,13 +323,16 @@ namespace UnityEngine.UI.Extensions
|
|||
}
|
||||
}
|
||||
int count = 0;
|
||||
|
||||
foreach (Match match in s_HrefRegex.Matches(fixedString))
|
||||
{
|
||||
s_TextBuilder.Append(fixedString.Substring(indexText, match.Index - indexText));
|
||||
s_TextBuilder.Append("<color=" + hyperlinkColor + ">"); // Hyperlink color
|
||||
|
||||
var group = match.Groups[1];
|
||||
if(isCreating_m_HrefInfos) {
|
||||
|
||||
if (isCreating_m_HrefInfos)
|
||||
{
|
||||
var hrefInfo = new HrefInfo
|
||||
{
|
||||
startIndex = s_TextBuilder.Length * 4, // Hyperlinks in text starting vertex indices
|
||||
|
@ -325,8 +340,10 @@ namespace UnityEngine.UI.Extensions
|
|||
name = group.Value
|
||||
};
|
||||
m_HrefInfos.Add(hrefInfo);
|
||||
} else {
|
||||
if(m_HrefInfos.Count > 0) {
|
||||
}
|
||||
else {
|
||||
if (m_HrefInfos.Count > 0)
|
||||
{
|
||||
m_HrefInfos[count].startIndex = s_TextBuilder.Length * 4; // Hyperlinks in text starting vertex indices;
|
||||
m_HrefInfos[count].endIndex = (s_TextBuilder.Length + match.Groups[2].Length - 1) * 4 + 3;
|
||||
count++;
|
||||
|
@ -359,6 +376,7 @@ namespace UnityEngine.UI.Extensions
|
|||
foreach (var hrefInfo in m_HrefInfos)
|
||||
{
|
||||
var boxes = hrefInfo.boxes;
|
||||
|
||||
for (var i = 0; i < boxes.Count; ++i)
|
||||
{
|
||||
if (boxes[i].Contains(lp))
|
||||
|
@ -388,7 +406,6 @@ namespace UnityEngine.UI.Extensions
|
|||
|
||||
public void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
|
||||
//do your stuff when highlighted
|
||||
//selected = false;
|
||||
if (m_ImagesPool.Count >= 1)
|
||||
|
@ -406,6 +423,7 @@ namespace UnityEngine.UI.Extensions
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnSelect(BaseEventData eventData)
|
||||
{
|
||||
//do your stuff when selected
|
||||
|
@ -437,9 +455,12 @@ namespace UnityEngine.UI.Extensions
|
|||
}
|
||||
|
||||
/* TEMPORARY FIX REMOVE IMAGES FROM POOL DELETE LATER SINCE CANNOT DESTROY */
|
||||
void Update() {
|
||||
if (clearImages) {
|
||||
for (int i = 0; i < culled_ImagesPool.Count; i++){
|
||||
void Update()
|
||||
{
|
||||
if (clearImages)
|
||||
{
|
||||
for (int i = 0; i < culled_ImagesPool.Count; i++)
|
||||
{
|
||||
DestroyImmediate(culled_ImagesPool[i]);
|
||||
}
|
||||
culled_ImagesPool.Clear();
|
||||
|
@ -450,7 +471,8 @@ namespace UnityEngine.UI.Extensions
|
|||
}
|
||||
|
||||
// Reseting m_HrefInfos array if there is any change in text
|
||||
void Reset_m_HrefInfos () {
|
||||
void Reset_m_HrefInfos()
|
||||
{
|
||||
previousText = text;
|
||||
m_HrefInfos.Clear();
|
||||
isCreating_m_HrefInfos = true;
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
/// Credit Brad Nelson (playemgames - bitbucket)
|
||||
/// Modified Gradient effect script from http://answers.unity3d.com/questions/1086415/gradient-text-in-unity-522-basevertexeffect-is-obs.html
|
||||
/// <summary>
|
||||
/// -Uses Unity's Gradient class to define the color
|
||||
/// -Offset is now limited to -1,1
|
||||
/// -Multiple color blend modes
|
||||
///
|
||||
/// Remember that the colors are applied per-vertex so if you have multiple points on your gradient where the color changes and there aren't enough vertices, you won't see all of the colors.
|
||||
/// </summary>
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UnityEngine.UI.Extensions
|
||||
{
|
||||
[AddComponentMenu("UI/Effects/Extensions/Gradient2")]
|
||||
public class Gradient2 : BaseMeshEffect {
|
||||
[SerializeField]
|
||||
Type _gradientType;
|
||||
|
||||
[SerializeField]
|
||||
Blend _blendMode = Blend.Multiply;
|
||||
|
||||
[SerializeField]
|
||||
[Range(-1, 1)]
|
||||
float _offset = 0f;
|
||||
|
||||
[SerializeField]
|
||||
UnityEngine.Gradient _effectGradient = new UnityEngine.Gradient() { colorKeys = new GradientColorKey[] { new GradientColorKey(Color.black, 0), new GradientColorKey(Color.white, 1) } };
|
||||
|
||||
#region Properties
|
||||
public Blend BlendMode {
|
||||
get { return _blendMode; }
|
||||
set { _blendMode = value; }
|
||||
}
|
||||
|
||||
public UnityEngine.Gradient EffectGradient {
|
||||
get { return _effectGradient; }
|
||||
set { _effectGradient = value; }
|
||||
}
|
||||
|
||||
public Type GradientType {
|
||||
get { return _gradientType; }
|
||||
set { _gradientType = value; }
|
||||
}
|
||||
|
||||
public float Offset {
|
||||
get { return _offset; }
|
||||
set { _offset = value; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override void ModifyMesh(VertexHelper helper) {
|
||||
if(!IsActive() || helper.currentVertCount == 0)
|
||||
return;
|
||||
|
||||
List<UIVertex> _vertexList = new List<UIVertex>();
|
||||
|
||||
helper.GetUIVertexStream(_vertexList);
|
||||
|
||||
int nCount = _vertexList.Count;
|
||||
switch(GradientType) {
|
||||
case Type.Horizontal: {
|
||||
float left = _vertexList[0].position.x;
|
||||
float right = _vertexList[0].position.x;
|
||||
float x = 0f;
|
||||
|
||||
for(int i = nCount - 1; i >= 1; --i) {
|
||||
x = _vertexList[i].position.x;
|
||||
|
||||
if(x > right) right = x;
|
||||
else if(x < left) left = x;
|
||||
}
|
||||
|
||||
float width = 1f / (right - left);
|
||||
UIVertex vertex = new UIVertex();
|
||||
|
||||
for(int i = 0; i < helper.currentVertCount; i++) {
|
||||
helper.PopulateUIVertex(ref vertex, i);
|
||||
|
||||
vertex.color = BlendColor(vertex.color, EffectGradient.Evaluate((vertex.position.x - left) * width - Offset));
|
||||
|
||||
helper.SetUIVertex(vertex, i);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case Type.Vertical: {
|
||||
float bottom = _vertexList[0].position.y;
|
||||
float top = _vertexList[0].position.y;
|
||||
float y = 0f;
|
||||
|
||||
for(int i = nCount - 1; i >= 1; --i) {
|
||||
y = _vertexList[i].position.y;
|
||||
|
||||
if(y > top) top = y;
|
||||
else if(y < bottom) bottom = y;
|
||||
}
|
||||
|
||||
float height = 1f / (top - bottom);
|
||||
UIVertex vertex = new UIVertex();
|
||||
|
||||
for(int i = 0; i < helper.currentVertCount; i++) {
|
||||
helper.PopulateUIVertex(ref vertex, i);
|
||||
|
||||
vertex.color = BlendColor(vertex.color, EffectGradient.Evaluate((vertex.position.y - bottom) * height - Offset));
|
||||
|
||||
helper.SetUIVertex(vertex, i);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Color BlendColor(Color colorA, Color colorB) {
|
||||
switch(BlendMode) {
|
||||
default: return colorB;
|
||||
case Blend.Add: return colorA + colorB;
|
||||
case Blend.Multiply: return colorA * colorB;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
Horizontal,
|
||||
Vertical
|
||||
}
|
||||
|
||||
public enum Blend {
|
||||
Override,
|
||||
Add,
|
||||
Multiply
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 45facfdc6a639f041b007c036dc527b8
|
||||
timeCreated: 1479244798
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -55,10 +55,10 @@ namespace UnityEngine.UI.Extensions
|
|||
[SerializeField]
|
||||
public int StartingScreen = 1;
|
||||
|
||||
[Tooltip("The distance between two pages based on page height, by default 3 times the width of the control")]
|
||||
[Tooltip("The distance between two pages based on page height, by default pages are next to each other")]
|
||||
[SerializeField]
|
||||
[Range(0, 8)]
|
||||
public float PageStep = 0;
|
||||
[Range(1, 8)]
|
||||
public float PageStep = 1;
|
||||
|
||||
public int CurrentPage
|
||||
{
|
||||
|
@ -77,26 +77,19 @@ namespace UnityEngine.UI.Extensions
|
|||
public SelectionChangeEndEvent OnSelectionChangeEndEvent { get { return m_OnSelectionChangeEndEvent; } set { m_OnSelectionChangeEndEvent = value; } }
|
||||
|
||||
// Use this for initialization
|
||||
void Start()
|
||||
void Awake()
|
||||
{
|
||||
_scroll_rect = gameObject.GetComponent<ScrollRect>();
|
||||
|
||||
if (_scroll_rect.horizontalScrollbar || _scroll_rect.verticalScrollbar)
|
||||
{
|
||||
Debug.LogWarning("Warning, using scrollbors with the Scroll Snap controls is not advised as it causes unpredictable results");
|
||||
Debug.LogWarning("Warning, using scrollbars with the Scroll Snap controls is not advised as it causes unpredictable results");
|
||||
}
|
||||
|
||||
_screensContainer = _scroll_rect.content;
|
||||
|
||||
DistributePages();
|
||||
|
||||
_lerp = false;
|
||||
_currentScreen = StartingScreen - 1;
|
||||
|
||||
_scroll_rect.horizontalNormalizedPosition = (float)(_currentScreen) / (_screens - 1);
|
||||
|
||||
ChangeBulletsInfo(_currentScreen);
|
||||
|
||||
if (NextButton)
|
||||
NextButton.GetComponent<Button>().onClick.AddListener(() => { NextScreen(); });
|
||||
|
||||
|
@ -104,12 +97,23 @@ namespace UnityEngine.UI.Extensions
|
|||
PrevButton.GetComponent<Button>().onClick.AddListener(() => { PreviousScreen(); });
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
UpdateChildPositions();
|
||||
_lerp = false;
|
||||
_currentScreen = StartingScreen - 1;
|
||||
|
||||
_scroll_rect.horizontalNormalizedPosition = (float)(_currentScreen) / (_screens - 1);
|
||||
|
||||
ChangeBulletsInfo(_currentScreen);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (_lerp)
|
||||
{
|
||||
_screensContainer.localPosition = Vector3.Lerp(_screensContainer.localPosition, _lerp_target, transitionSpeed * Time.deltaTime);
|
||||
if (Vector3.Distance(_screensContainer.localPosition, _lerp_target) < 1f)
|
||||
if (Vector3.Distance(_screensContainer.localPosition, _lerp_target) < 0.1f)
|
||||
{
|
||||
_lerp = false;
|
||||
|
||||
|
@ -270,7 +274,10 @@ namespace UnityEngine.UI.Extensions
|
|||
_dimension = currentXPosition + _offset * -1;
|
||||
|
||||
_screensContainer.GetComponent<RectTransform>().offsetMax = new Vector2(_dimension, 0f);
|
||||
}
|
||||
|
||||
void UpdateChildPositions()
|
||||
{
|
||||
_screens = _screensContainer.childCount;
|
||||
|
||||
_positions = new System.Collections.Generic.List<Vector3>();
|
||||
|
|
|
@ -54,10 +54,10 @@ namespace UnityEngine.UI.Extensions
|
|||
[SerializeField]
|
||||
public int StartingScreen = 1;
|
||||
|
||||
[Tooltip("The distance between two pages based on page height, by default 3 times the width of the control")]
|
||||
[Tooltip("The distance between two pages based on page height, by default pages are next to each other")]
|
||||
[SerializeField]
|
||||
[Range(0, 8)]
|
||||
public float PageStep = 0;
|
||||
[Range(1, 8)]
|
||||
public float PageStep = 1;
|
||||
|
||||
public int CurrentPage
|
||||
{
|
||||
|
@ -76,26 +76,19 @@ namespace UnityEngine.UI.Extensions
|
|||
public SelectionChangeEndEvent OnSelectionChangeEndEvent { get { return m_OnSelectionChangeEndEvent; } set { m_OnSelectionChangeEndEvent = value; } }
|
||||
|
||||
// Use this for initialization
|
||||
void Start()
|
||||
void Awake()
|
||||
{
|
||||
_scroll_rect = gameObject.GetComponent<ScrollRect>();
|
||||
|
||||
if (_scroll_rect.horizontalScrollbar || _scroll_rect.verticalScrollbar)
|
||||
{
|
||||
Debug.LogWarning("Warning, using scrollbors with the Scroll Snap controls is not advised as it causes unpredictable results");
|
||||
Debug.LogWarning("Warning, using scrollbars with the Scroll Snap controls is not advised as it causes unpredictable results");
|
||||
}
|
||||
|
||||
_screensContainer = _scroll_rect.content;
|
||||
|
||||
DistributePages();
|
||||
|
||||
_lerp = false;
|
||||
_currentScreen = StartingScreen - 1;
|
||||
|
||||
_scroll_rect.verticalNormalizedPosition = (float)(_currentScreen) / (float)(_screens - 1);
|
||||
|
||||
ChangeBulletsInfo(_currentScreen);
|
||||
|
||||
if (NextButton)
|
||||
NextButton.GetComponent<Button>().onClick.AddListener(() => { NextScreen(); });
|
||||
|
||||
|
@ -103,12 +96,23 @@ namespace UnityEngine.UI.Extensions
|
|||
PrevButton.GetComponent<Button>().onClick.AddListener(() => { PreviousScreen(); });
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
UpdateChildPositions();
|
||||
_lerp = false;
|
||||
_currentScreen = StartingScreen - 1;
|
||||
|
||||
_scroll_rect.verticalNormalizedPosition = (float)(_currentScreen) / (float)(_screens - 1);
|
||||
|
||||
ChangeBulletsInfo(_currentScreen);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (_lerp)
|
||||
{
|
||||
_screensContainer.localPosition = Vector3.Lerp(_screensContainer.localPosition, _lerp_target, transitionSpeed * Time.deltaTime);
|
||||
if (Vector3.Distance(_screensContainer.localPosition, _lerp_target) < 1f)
|
||||
if (Vector3.Distance(_screensContainer.localPosition, _lerp_target) < 0.1f)
|
||||
{
|
||||
_lerp = false;
|
||||
EndScreenChange();
|
||||
|
@ -268,7 +272,10 @@ namespace UnityEngine.UI.Extensions
|
|||
_dimension = currentYPosition + _offset * -1;
|
||||
|
||||
_screensContainer.GetComponent<RectTransform>().offsetMax = new Vector2(0f, _dimension);
|
||||
}
|
||||
|
||||
void UpdateChildPositions()
|
||||
{
|
||||
_screens = _screensContainer.childCount;
|
||||
|
||||
_positions = new System.Collections.Generic.List<Vector3>();
|
||||
|
@ -283,6 +290,7 @@ namespace UnityEngine.UI.Extensions
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
int GetPageforPosition(Vector3 pos)
|
||||
{
|
||||
for (int i = 0; i < _positions.Count; i++)
|
||||
|
@ -377,6 +385,7 @@ namespace UnityEngine.UI.Extensions
|
|||
|
||||
public void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
//transform.GetComponent<RectTransform>().pivot = new Vector2(0.5f, 0.5f);
|
||||
_startDrag = true;
|
||||
if (_scroll_rect.vertical)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue