71 lines
1.7 KiB
C#
71 lines
1.7 KiB
C#
|
using UnityEngine;
|
|||
|
using System.Collections;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 超链接按钮 参考资料 [1] 陌的专栏 http://blog.csdn.net/juan_bo/article/details/52301302
|
|||
|
/// </summary>
|
|||
|
public class UILinkButton : MonoBehaviour
|
|||
|
{
|
|||
|
|
|||
|
private Text linkText;
|
|||
|
|
|||
|
public string m_url;
|
|||
|
|
|||
|
void Awake()
|
|||
|
{
|
|||
|
var tfText = transform.Find("Text");
|
|||
|
if (tfText)
|
|||
|
linkText = transform.Find("Text").GetComponent<Text>();
|
|||
|
|
|||
|
}
|
|||
|
void Start()
|
|||
|
{
|
|||
|
CreateLink(linkText, onButtonClick);
|
|||
|
}
|
|||
|
|
|||
|
public void CreateLink(Text text, UnityEngine.Events.UnityAction onClickBtn)
|
|||
|
{
|
|||
|
if (text == null)
|
|||
|
return;
|
|||
|
|
|||
|
//克隆Text,获得相同的属性
|
|||
|
Text underline = Instantiate(text) as Text;
|
|||
|
underline.name = "Underline";
|
|||
|
|
|||
|
underline.transform.SetParent(text.transform);
|
|||
|
RectTransform rt = underline.rectTransform;
|
|||
|
|
|||
|
underline.transform.localScale = Vector3.one;
|
|||
|
|
|||
|
//设置下划线坐标和位置
|
|||
|
rt.anchoredPosition3D = Vector3.zero;
|
|||
|
rt.offsetMax = Vector2.zero;
|
|||
|
rt.offsetMin = Vector2.zero;
|
|||
|
rt.anchorMax = Vector2.one;
|
|||
|
rt.anchorMin = Vector2.zero;
|
|||
|
|
|||
|
|
|||
|
underline.text = "_";
|
|||
|
float perlineWidth = underline.preferredWidth; //单个下划线宽度
|
|||
|
float width = text.preferredWidth;
|
|||
|
int lineCount = (int)Mathf.Round(width / perlineWidth);
|
|||
|
|
|||
|
for (int i = 1; i < lineCount; i++)
|
|||
|
underline.text += "_";
|
|||
|
|
|||
|
var btn = text.gameObject.AddComponent<UIButton>();
|
|||
|
btn.onClick.AddListener(onClickBtn);
|
|||
|
}
|
|||
|
|
|||
|
//点击响应
|
|||
|
void onButtonClick()
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(m_url))
|
|||
|
return;
|
|||
|
|
|||
|
Application.OpenURL(m_url);
|
|||
|
|
|||
|
}
|
|||
|
}
|