初学UE4,笔者做了个练枪训练场的demo(Github地址)。在项目中,玩家完成目标后需要进行提示,而简单的静态文本提示过于死板,遂本人想到了实现三维空间中的跑马灯效果文本,其炫目的效果能带给玩家较大的满足感(并没有)。
经过一番面向搜索引擎编程,发现网上罕有现成的思路,大多都是在二维HUD中实现的效果。那就自己造轮子呗。
基本思路
整个逻辑其实很简单,就两个关键点:
- 实现文本超出一定范围后被“截断的效果”
- 实现文本的产生、移动和销毁。
实现
文本材质
首先将默认文本材质拷贝一份。
将蓝图如下修改:
基本逻辑就是外部设定一个包围盒,文本超出包围盒的部分设为透明。
BP_ScrollText Actor类
Component
新建Actor蓝图类,首先添加Box和Arrow两个Component。此处的Box指定文本滚动的范围,Arrow指定文本滚动的方向。
为了不影响场景的其他部分,新建了一个碰撞通道ScrollTextChannel。Box按如下进行碰撞设置。
Variables
创建这么几个变量。
其中TextObjects的类型为Text Render Actor引用数组,Text Material类型为Dynamic Material Instance,TextType类型为Text Render Actor的类型引用,BaseColor的类型为Color。
Events
初始时更新材质。
逐帧检查当前有效性,并产生、移动和销毁文本。
提供给外部设置文本的接口。
Functions
下面就是一些具体的实现逻辑。
Text Render Actor子类
对于上述的ScrollText蓝图类,我们需要创建自己的Text Render Actor子类,并赋给ScrollText,才能工作。
我们首先创建对应类型,并添加一个Box
修改文本,并且设置Box为容纳文本的合适大小。
这里的Box的Collision也要一样设置。
使用与效果
将ScrollText类实例化到场景,如下设置默认变量。
为了实现双排滚动的效果,这里实例化了两个ScrollText类,并且将Arrow调整为不同方向。
最终效果: