两个让 NGUI 按钮顺序显示(间隔一段时间后出现)的方法

         让NGUI按钮间隔一段时间后通过alpha透明显示,这两个类都是我同事写的。不长,也比较容易理解。只要给父节点添加上代码,然后每次父节点显示的时候触发一次OnEnable事件,就可以看到子UI会一个个alpha透明出现,非常好用。
using UnityEngine;
using System.Collections;
using System.Linq;

public class DelayAniShow : MonoBehaviour
{

	public float delay = 1.0f;
	public float duration = 1.0f;

	void OnEnable()
	{
		UISprite[] sprite = GetComponentsInChildren<UISprite>();
		sprite = sprite.OrderBy(s => s.spriteName).ToArray();
		foreach(var item in sprite)
			item.alpha = 0.0f;

		int index = 0;
		foreach(UISprite sp in sprite)
		{
			TweenAlpha tween = TweenAlpha.Begin(sp.gameObject, duration, 1.0f);
			tween.from = 0.0f;
			tween.delay = delay * index++;
		}
	}

}


using UnityEngine;
using System.Collections;

public class MainPanelEnter : MonoBehaviour
{
	// panel 下的子物体项
	Transform[] childs;
	// 两个 Item 出现的间隔
	public float interval = 0.5f;
	// 每个Item 从全部透明到完全不透明的变化的所需时间
	public float alphaAniDuration = 0.5f;

	void Start()
	{
		if(childs == null)
		{
			// 获取 panel 的子物体个数, 并且把遍历一次把他的子物体的 Transform 保存在 数组中
			childs = new Transform[transform.childCount];
			for(int i = 0, length = transform.childCount; i < length; i++)
			{
				childs[i] = transform.GetChild(i);
			}
		}
	}
	// OnEnable 函数, 当每次被唤醒的时候,都会执行一次
	void OnEnable()
	{
		if(childs == null)
			Start();
		//foreach(var item in childs)
		//{
		//	item.collider.enabled = true;
		//}
		StartCoroutine(OnBeginEnter());
	}

	void Update()
	{

	}

	IEnumerator OnBeginEnter()
	{
		foreach(Transform t in childs)
		{
			t.gameObject.SetActive(false);
		}

		foreach(Transform t in childs)
		{
			yield return new WaitForSeconds(interval);
			t.gameObject.SetActive(true);
			TweenAlpha tween = TweenAlpha.Begin(t.gameObject, alphaAniDuration, 1.0f);
			tween.from = 0.0f;
			tween.eventReceiver = gameObject;
			tween.callWhenFinished = "OnOnBeginEnterAniFinishod";
			// yield return new WaitForEndOfFrame();
			t.GetComponentInChildren<Animation>().Rewind();
		}
	}

	void OnBeginOut()
	{
		foreach(var item in childs)
		{
			item.collider.enabled = false;
			TweenAlpha.Begin(item.gameObject, alphaAniDuration, 0.0f);
		}
	}

	void OnOnBeginEnterAniFinishod(UITweener tween)
	{
		foreach(var item in childs)
		{
			if(item.IsChildOf(tween.transform))
				item.collider.enabled = true;
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的示例代码,可以在 Unity 和 NGUI 中实现显示带多个网络图片的富文本: ```csharp using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine.UI; public class RichText : MonoBehaviour { public UILabel label; public UIGrid imagesGrid; public GameObject imagePrefab; private List<string> urls = new List<string>(); // 正则表达式匹配网络图片的链接 private static readonly Regex UrlRegex = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); public void SetText(string text) { // 清空之前的图片 foreach (Transform child in imagesGrid.transform) { Destroy(child.gameObject); } // 获取所有网络图片的链接 urls.Clear(); MatchCollection matches = UrlRegex.Matches(text); foreach (Match match in matches) { string url = match.Value; if (url.EndsWith(".jpg") || url.EndsWith(".png")) { urls.Add(url); } } // 将所有网络图片添加到 imagesGrid 中 foreach (string url in urls) { GameObject imageObject = Instantiate(imagePrefab, imagesGrid.transform); StartCoroutine(LoadImage(url, imageObject.GetComponent<UITexture>())); } // 将文本内容设置到 label 上 label.text = text; } private IEnumerator LoadImage(string url, UITexture texture) { WWW www = new WWW(url); yield return www; if (www.error == null) { texture.mainTexture = www.texture; } else { Debug.LogError("Failed to load image: " + www.error); } } } ``` 使用方法: 1. 在 Unity 中创建一个 UI Root,添加一个 NGUI 的 Label 和 Grid。 2. 将 RichText 脚本挂载到 Label 上,将 imagesGrid 和 imagePrefab 拖拽到脚本对应的字段中。 3. 调用 `SetText()` 方法设置富文本内容即可,例如: ```csharp RichText richText = GetComponent<RichText>(); richText.SetText("这是一段带图片的富文本,<img src=\"http://example.com/image1.jpg\"> 和 <img src=\"http://example.com/image2.png\">"); ``` 这样,就可以在 NGUI 中实现显示带多个网络图片的富文本了。注意,这里使用了 HTML 标记 `<img>` 来指定图片的链接,这是一种常见的富文本格式。同时,也可以根据需要修改正则表达式来支持不同的富文本格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值