最近看到好多平台都有弹幕,觉得挺有意思,就做的试试看,但也有不少问题。
1.制作弹幕字体预制
新建一个unity工程,新建了一个Canvas的Text,然后制作脚本,主要用来字体移动效果和文本输入,建立的脚本叫TextItem,脚本内容如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextItem : MonoBehaviour
{
/// <summary>
/// text控件显示文字
/// </summary>
public string text="";
/// <summary>
/// 当前脚本所在的text控件
/// </summary>
private Text currentText;
/// <summary>
/// 弹幕移动的速度
/// </summary>
public float speed;
void Start()
{
//初始化
currentText = GetComponent<Text>();
//设置显示字体以及随机颜色
currentText.text = text;
currentText.color = Random.ColorHSV();
//获取屏幕范围内的y坐标随机,这里没做屏幕适配,free aspect举列
float y = Random.Range(-200f, 220f);
transform.localPosition = new Vector3(550f, y, 0);
}
void Update()
{
if (speed != 0)
{
float x = transform.localPosition.x + speed * Time.deltaTime;
transform.localPosition = new Vector3(x, transform.localPosition.y, 1);
//出屏幕销毁
if (transform.localPosition.x < -550f)
{
Destroy(gameObject);
}
}
}
}
2.建立输入框,输入弹幕内容,生成弹幕
Canvas下建立unity自带的ugui带的InputField控件,并且建立脚本叫InputControl,脚本内容如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class InputControl : MonoBehaviour
{
/// <summary>
/// text预制获取
/// </summary>
public TextItem item;
/// <summary>
/// 设立弹幕父物体
/// </summary>
public Transform parent;
/// <summary>
/// 当前输入框控件
/// </summary>
private InputField inputField;
// Use this for initialization
void Start()
{
//初始化
inputField = GetComponent<InputField>();
}
/// <summary>
/// 输入完成,创建输入内容的弹幕
/// </summary>
public void OnSumbit()
{
CreateItem(inputField.text);
inputField.text = "";
}
/// <summary>
/// 实例化弹幕
/// </summary>
/// <param name="text">弹幕内容</param>
public void CreateItem(string text)
{
var temp = Instantiate(item) as TextItem;
temp.transform.SetParent(parent);
temp.text = text;
}
}
把脚本挂到InputField控件上,并且在InputField的脚本上设置On End Exit执行OnSumbit方法,并且拖拽InputControl脚本的预制和父物体内容,具体效果如图:
3.单机的弹幕效果完成
按照前面两步后,运行,就可以看到自己在输入框中输入内容,弹幕就飘出来了,然后继续输入,会继续飘出来,效果如图: