Unity游戏广播走马灯可循环可插入-创新互联
应朋友要求帮忙写的一个游戏广播走马灯程序,可以循环播放单条消息的次数也可以插入消息优先播放,废话不多说直接上代码,(这里只是基本的功能实现,具体封装自己去封装了,我就不封装了,也是对你们的锻炼,哈哈)
站在用户的角度思考问题,与客户深入沟通,找到敦煌网站设计与敦煌网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广、域名与空间、雅安服务器托管、企业邮箱。业务覆盖敦煌地区。using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
enum CirculationType
{
Single,
Circulation,
Insertion,
}
class Item
{
public Item(string pText, int pCount)
{
m_pText = pText;
Count = pCount;
}
public string m_pText;
public int Count;
}
public class NewBehaviourScript : MonoBehaviour
{
///
/// 公告跑马灯
///
public Text NoticeText;
public Vector3 Speed = new Vector3(2, 0, 0);
public float _MoveEndPoint;
public Vector2 _MoveStartPoint;
public float _ParentWidth;
public float _SelfWidth;
public Button button;
private int spe = 3;
string pname;
List pName;
bool m_bCirculation;
bool m_bInsertion;
bool m_bRun=true;
int m_nRun = 0;
Queue- GetVs = new Queue
- ();
///
/// 土豪数据 先进后出
///
Stack- GetStack = new Stack
- ();
public event Action m_pUpdateQueueText;
public event Action m_pUpdateStackText;
private void Start()
{
GetVs.Enqueue(new Item("元素1222222222222222222222222222222222222222222222222222222222222", 0));
GetVs.Enqueue(new Item("元素233333333333333333333333333333333333333333333333333333333333", 2));//2 3
GetVs.Enqueue(new Item("元素344444444444444444444444444444444444444444444444444444444444", 3));//3 4
GetVs.Enqueue(new Item("元素35555555555555555555555555555555555555555555555555555555555", 0));
GetQueueText();
RegisterBroadcast();
m_pUpdateQueueText += GetQueueText;
m_pUpdateStackText += GetStackText;
button.onClick.AddListener(delegate ()
{
GetStack.Push(new Item("土豪充值:百万!!!!!!!! 这个是超级土豪!!!!! 大家欢迎!!!!", 3));
});
}
///
/// 注册 公告,便于刷新
///
///
void RegisterBroadcast()
{
_ParentWidth = NoticeText.transform.parent.GetComponent().rect.width;
_SelfWidth = NoticeText.preferredWidth;
NoticeText.transform.GetComponent().pivot = new Vector2(0, 0.5f);
_MoveEndPoint = -_ParentWidth / 2 - _SelfWidth;
_MoveStartPoint = new Vector2(_ParentWidth / 2, 0);
}
private void FixedUpdate()
{
if (GetStack.Count == 0 && GetVs.Count == 0)
{
if (m_bRun)
{
m_nRun++;
m_bRun = false;
Debug.LogError("ddd");
}
}
else
{
m_bRun = true;
}
if (m_nRun >=2) return;
m_bInsertion = GetStack.Count != 0 ? true : false;
// 公告移动
if (NoticeText.gameObject.activeInHierarchy)
{
NoticeText.transform.localPosition -= Speed;
if (NoticeText.transform.localPosition.x <= _MoveEndPoint)
{
NoticeText.transform.localPosition = _MoveStartPoint;
if (m_nRun == 1) m_nRun++;
m_bCirculation = spe > 0 ? true : false;
if (m_bCirculation)
spe--;
if (m_bInsertion)
{
if (m_pUpdateStackText != null)
m_pUpdateStackText();
}
else
{
if (m_pUpdateQueueText != null && GetVs.Count != 0 && !m_bCirculation)
{
m_pUpdateQueueText();
}
}
}
}
}
///
/// 获取下一条
///
///
public void GetQueueText()
{
Item item = GetVs.Dequeue();
NoticeText.text = item.m_pText;
spe = item.Count - 1;
}
public void GetStackText()
{
Item item = GetStack.Pop();
NoticeText.text = item.m_pText;
spe = item.Count - 1;
}
}
我这里是使用 栈队和事件完成的,有什么好的建议可以留言,(其实这个代码还可以优化,只是没时间去改了,有兴趣的同学可以自己拿去优化试试~)。
下面是执行效果 :
顺序播放
插入
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享题目:Unity游戏广播走马灯可循环可插入-创新互联
文章位置:http://azwzsj.com/article/dpgphs.html