RPG 游戏开发(17)文字系统 2
这是文字系统的第二部分,这一部分,我们将创建一个 GameObject 包含一个 Manager 脚本,用来负责我们所有地图上的文字。
创建一个新的脚本 FloatingTextManager。这个类需要有一个包含了所有 FloatingText 的列表,所以这堆 FloatingText 可以作为对象池重复使用。每次重复使用的时候,我们需要修改文字内容、颜色、位置等其他属性。
我们需要定义两个成员变量,类型为 GameObject。textPrefab 是文字组件的预制件,用于之后在对象池里生成这个组件(我们过后就好像复制 textPrefab 在游戏界面中)。textContainer 是所有文字组件的父级组件。
然后再有一个保存 FloatingText 类型的列表,这就是我们的对象池。
接下来准备一个函数 GetFloatingText,这个函数用于从对象池里找到未被激活(未使用)的 FloatingText。如果找不到,或者说对象池为空,那么就创建一个新的 FloatingText。新的 FloatingText 的 GameObject 就是文字预制件(textPrefab),然后他的父组件为 textContainer。再来获取它的 Text 控件。最后将创建好的 FloatingText 对象加入到对象池里。
在 FloatingTextManager 里我们也要有个 Show 函数,在 FloatingText 的 Show 函数只是让当前文字显示,而 FloatingTextManager 的 Show 函数将会对这个文字组件进行属性设置(文本、颜色之类的)。
所以 Show 函数,我们需要的参数有:需要显示的文字、字体大小、字体颜色、位置、移动方向、显示时长。然后分别给他赋值。floatingText.text 是一个 Text 类型,里面包含了 text、fontSize、color 等属性。Unity 里有两个不同的坐标系—— World 和 Screen:World 是世界坐标,也就是和地图是同一个坐标系的,另一个是 Screen 屏幕坐标,所有的 UI 都是在 Screen 坐标上。所以,我们需要调用 Camera.main.WorldToScreenPoint 函数将 World 坐标系转换为 Screen 坐标系。
最后再写上 Update 函数,我们需要便利对象池里的 FloatingText 对象,然后调用它的 UpdateFloatingText 函数。
using System.Collections; |
这篇文章就是准备对象池和其操作。下一篇我们将会学习怎么使用它。