弹幕消息对象的结构如下
弹幕底框的设置如下
VIP图标和文本设置成底框的子节点
控制脚本如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using ZheJiangVR;
using Newtonsoft.Json;
/*
* Author:W
* 弹幕对象UI
*/
/// <summary>
/// 颜色数据
/// </summary>
[System.Serializable]
public class ColorConfigInfo
{
public string color { get; set; }
public string startColor { get; set; }
public string centerColor { get; set; }
public string endColor { get; set; }
}
public class BulletMsgUI : MonoBehaviour
{
public Image botImg;
public Image vipImg;
public TextMeshProUGUI ConText;
private BulletContentData bulletContentData;
/// <summary>
/// 弹幕初始化
/// </summary>
/// <param name="bulletContentData"></param>
public void Init(BulletContentData bulletContentData)
{
this.bulletContentData = bulletContentData;
//关于底框的处理
botImg.enabled = bulletContentData.isSelf;
//关于VIP图标的处理
this.vipImg.gameObject.SetActive((bulletContentData.vipType == 0)?false:true);
//关于文本内容中表情标识的解析
ConText.text = BulletChatSystem.Instance.GetParsedContentForClient(bulletContentData.content);
//关于文本颜色的解析
SetContentColor(bulletContentData.cssStyle);
}
/// <summary>
/// 设置文本颜色
/// </summary>
/// <param name="colorStr"></param>
private void SetContentColor(string colorStr)
{
ColorConfigInfo colorData = JsonConvert.DeserializeObject<ColorConfigInfo>(colorStr);
if (string.IsNullOrEmpty(colorData.startColor))
{
ConText.colorGradientPreset.topLeft = ColorUtil.HexToColor(colorData.color);
ConText.colorGradientPreset.topRight = ColorUtil.HexToColor(colorData.color);
ConText.colorGradientPreset.bottomLeft = ColorUtil.HexToColor(colorData.color);
ConText.colorGradientPreset.bottomRight = ColorUtil.HexToColor(colorData.color);
}
else
{
ConText.colorGradientPreset.topLeft = ColorUtil.HexToColor(colorData.startColor);
ConText.colorGradientPreset.topRight = ColorUtil.HexToColor(colorData.startColor);
ConText.colorGradientPreset.bottomLeft = ColorUtil.HexToColor(colorData.endColor);
ConText.colorGradientPreset.bottomRight = ColorUtil.HexToColor(colorData.endColor);
}
}
}