关于颜色核心
基础要求
| 先尝试回答下面的问题:什么是文本域、文本光标?什么是窗口字符、底层字符?窗口字符分为哪些类型?窗口字符、底层字符有哪些固定格式? |
如果你对上述问题有疑问,那么说明你还不了解 窗口字符。
需要去看看:”23.窗口字符 > 关于窗口字符.docx”。
相关插件
核心插件:
◆Drill_CoreOfColor 窗口字符 - 颜色核心
相关子插件:
◆Drill_EnemyTextColor UI - 敌人文本颜色
◆Drill_ActorTextColor UI - 角色文本颜色
◆Drill_ItemTextColor UI - 物品+技能文本颜色
◆Drill_WindowLog 战斗UI - 窗口提示消息
颜色核心主要提供 普通颜色和高级颜色 的设置。
子插件则提供 文本颜色与 敌人/角色/物品/技能 的绑定。
插件关系
插件的相互关系如下图:

这里颜色核心只能提供 静态 的文本颜色功能。
动态的文本颜色变换,需要通过滤镜实现。比如插件:Drill_ItemTextFilter UI - 物品+技能文本的滤镜效果
颜色核心
定义
1)介绍
窗口皮肤颜色: 指窗口皮肤提供的文本颜色。
固定为 \c[0] - \c[31] 的颜色,对应窗口皮肤的右下角的32个颜色。
普通颜色: 指普通的文本颜色。
可以通过 \c[101] 或 \cc[#ff00ff] 定义。可见 普通颜色 。

高级颜色: 指含渐变的文本颜色。
可以通过 \c[201] 定义,包含最多6个节点以及渐变方向组成,可见 高级颜色 。

2)窗口字符
颜色相关的窗口字符如下。
| 窗口字符 | 描述 |
| \c[0] - \c[31] | 之后文字显示为窗口皮肤颜色。 |
| \c[101] - \c[199] | 之后文字显示为普通颜色。 |
| \c[201] - \c[299] | 之后文字显示为高级渐变颜色。 |
| \cc[#ffffff] | 之后的文本使用此临时普通颜色。 |
| \cc[save] | 暂存当前文本颜色。 |
| \cc[load] | 之后的文本使用暂存的颜色。 |
| \clc[#ffffff:#11ffff:10] | 之后文字按字数渐变显示普通颜色。 |
| \clc[#00ff00:#0000ff:当前行字数] | 之后文字按当前行字数渐变显示普通颜色。 |
其中,普通颜色:
\c[101] 对应 普通颜色1;
\c[102] 对应 普通颜色2;
……

其中,高级颜色:
\c[201] 对应 高级颜色1;
\c[202] 对应 高级颜色2;
……

普通颜色与高级颜色固定只有99种设置。
3)全局默认值
游戏默认使用白色文本颜色,插件参数中配置如下图。

| 插件提供了 所有文本和对话框 的自定义文本颜色设置,可以通过插件指令修改,且修改后永久有效。 |
默认值的插件指令修改如下图。具体效果可以去 窗口字符管理层 看看颜色核心介绍。

如果你同时用插件指令设置了颜色,并且使用了窗口字符\c[]设置颜色,
那么优先按窗口字符的设置来。
除了颜色核心,相关子插件也提供了修改颜色的插件指令。
比如永久修改指定物品的颜色。


可以去 窗口字符管理层 看看示例 ”UI文本永久变色”。
普通颜色
1)常规定义
\c[101] - \c[199] 的区间用于定义普通颜色。
插件默认提供了普通颜色的配置,如下图。
(依次为 赤橙黄绿青蓝紫 粉棕灰黑白)


2)临时定义
如果你的颜色只是临时使用的,可以直接设置颜色代码并表示颜色。
比如 \cc[#ff00ff] 表示紫红色。


3)按字数渐变
此外,普通颜色能够设置多个字数之间的过渡设置。
使用窗口字符 “\clc[起始色:终止色:字数]” 即可。


高级颜色
1)节点设置
\c[201] - \c[299] 的区间用于定义高级渐变颜色。
插件默认配置提供了高级颜色的配置,如下图。
(依次为 赤橙黄绿青蓝紫 粉棕灰)


你可以在高级颜色中设置多个节点,每个节点对应一种颜色。

这种节点颜色设置,与ps、ai矢量绘图工具的渐变性质一样。
如下图,设置了3个节点,对应的颜色也会在下面字体中体现。
(最下面的节点值为0,最上面的节点值为1,中间则为0.5左右。)


2)DEBUG查看渐变方向
渐变方向在0-360度范围之间。
将渐变设置为非常清晰的一根线,你可以看到下面的情况:
0度: 
20度:
50度:
70度:
为了在游戏中看清渐变方向,
颜色核心还提供了DEBUG窗口字符,能让高级颜色显示其框结构。

DEBUG窗口字符如下图,红色的点为中心点,紫色的点为渐变方向。

3)绘制时的渐变色
根据窗口字符的原理可知,
有的窗口字符是 一组全部绘制,有的窗口字符是 一个个绘制。
(窗口字符的原理介绍,可见:”23.窗口字符 > 关于窗口字符.docx”)

举个例子,在战斗消息、对话窗口中,
这些窗口字符为一个个绘制,每个字符都单独配置一个渐变。
由于一个个绘制,下图可以明显看到每个字都有斜向渐变,而不是三个字整体斜向渐变。


数据更新与旧存档
具体介绍与定义先去了解一下“21.管理器 > 数据更新与旧存档.docx”。
| 注意,这里提及的是 修改注释与旧存档 的关系。如果你直接更新了插件,旧存档赶紧删了。更新插件相当于数据底层变动,而数据底层变动对旧存档影响是无法预估无法控制的。 |
由于插件指令可以对 敌人文本色、物品文本色、角色文本色 进行修改。
因此,这些文本色的数据会被保存到存档中。
如果读取旧存档,会存在颜色记录问题。
不过,插件支持 空数据同步更新 ,如果旧存档之前未配置物品,那么新配置的物品颜色,可以实现颜色的同步更新。
从零开始设计(DIY)
设置自定义颜色并给物品变色
1. 设置一个目标
由于作者我之前默认你们都会以下技巧:
会用颜色窗口字符、会使用颜色代码、会使用物品变色插件
所以文档写的有点跳跃。
(ノ`⊿´)ノ但是介于群友总是时不时讨论插件变色,
(ノ`⊿´)ノ而且还有宁愿用别人的插件也不愿意用我的,作者我不高兴。

所以这里作者我打算新开个工程,单独介绍一下物品变色。
2. 结构规划/流程梳理
首先加上颜色核心插件:
◆Drill_CoreOfCharDraw 系统 - 字符绘制核心
◆Drill_CoreOfWindowCharacter 窗口字符 - 窗口字符核心
◆Drill_CoreOfColor 窗口字符 - 颜色核心
然后,需要物品变色插件:
◆Drill_ItemTextColor UI - 物品+技能文本颜色
这里新建一个工程,单独试一下变色的功能。
| 注意,后来作者我漏了个插件:Drill_CoreOfDialog 对话框-对话框优化核心。后面章节会说明。 |
3. 测试默认颜色
新建一个工程。

把颜色核心插件加上。

添加颜色核心后,
插件会自带配置好的普通颜色和高级颜色。

在游戏中创建一个事件,开启一个对话框,
测试“\c[101]”普通颜色的效果。

4. 颜色代码获取
使用“\c[101]”,能将文本变为预选设置的颜色。
其它变色的窗口字符如下图。

你也可以使用临时普通颜色,
直接写颜色代码来变色。

要获取颜色代码,可以打开PS,在调色板里面看。
右下角就是颜色代码。

除了通过PS,很多在线网站,也有颜色代码的获取。
http://tool.oschina.net/commons?type=3

5. 测试自定义颜色代码
这里作者我选择了几个不一样的红色,加在对话框里。

发现出现了下面的问题。

作者我的问题,作者我看一眼就知道缺少了 对话框优化核心插件。但如果是萌新们,遇到这种情况会很着急,团团转。这个问题可见“23.窗口字符 > 关于窗口字符.docx”的“不生效的窗口字符(对话框)”出现“[xx]”时,说明窗口字符“\aaaa[xx]”的结构解析失败,可能缺核心插件。出现“\aaa[xx]”时,说明窗口字符的子插件没加。由于对话框是依据时间逐个绘制,而非一次性绘制。所以需要 对话框优化核心 插件对 窗口字符 进行额外支持。 |
总之,把对话框优化核心加上,就正常了。

颜色设置的效果如下。

另外,颜色核心有逐个字符变色功能,
设置两端的颜色代码即可,能实现每个文字的颜色变色。

变色效果如下。


6. 物品颜色插件设置
接下来,我们给物品进行变色。
◆Drill_ItemTextColor UI - 物品+技能文本颜色
添加插件。

插件中可以通过备注来修改颜色。
颜色除了普通颜色、高级颜色,也一样可以用快捷的 颜色代码。

这里我们选择一个颜色,选淡紫色吧。(#9581fb)

在物品中添加备注,这里选择第1个物品,如下图。
在游戏中通过事件获取一个物品,
然后打开物品界面,可以看到颜色变了。

| 颜色核心插件中虽然区分普通颜色和高级颜色,但都是静态的颜色。动态的颜色需要滤镜插件。 |
7. 物品颜色修改
除了通过备注给物品设置颜色,
还能通过插件指令临时修改颜色。
这里先提一下 窗口字符核心 提供的快捷窗口字符。

使用窗口字符“\ii[1]”,
能直接表示第1个物品名称+图标,
并且物品变色的效果也能单独显示出来,不需要手动写窗口字符。

接下来,物品颜色的插件指令如下。

建立一个事件,用上述插件指令设置变换颜色,
通过播放窗口字符“\ii[1]”来查看变化效果。

可以看到对话中的效果依次如下。



打开物品界面,可以看到最后一次变色的效果。

| 注意修改文本颜色的插件指令中,有两个“普通”;两个“高级”哦。修改指令时,容易看漏文本。 |
设计一个艺术渐变字体
1. 设置一个目标
首先你需要先设想或看到一个目标,来根据目标的字体情况来设想你的字体。
比如2022年6月5日作者我今天偶然跑去看音游录播,
初音未来游戏《Project DIVA MEGA 39's +》。
分数结算界面,出现了下面这些艺术字。
作者我的第一反应是,这个能用现成插件实现,然后就上手了。

| 注意,这里的设计,可以用ps先做成图片,再加到窗口字符里面去。但是这里作者我想尽可能不用ps,只通过窗口字符的功能来实现。 |
2. 结构规划/流程梳理
在规划窗口字符之前,你需要先了解有哪些窗口字符,建议去 窗口字符管理层 转一圈,这样能快速学习并掌握到大部分能搭配的窗口字符。
首先,字体。
字体不考虑中文情况,因为可以免费商用的中文很少。
而且要找到这么粗的字体结构,很难。所以优先考虑 免费商用 的英文字体。
然后,渐变色。
从表面上来看,应该是斜向45度左右的渐变字体,而且渐变是一条非常明确的线。
接着,字符块。
从这个角度上来看,明显是三个、四个,五个英文字母,连成一体,然后再应用了渐变色效果。所以还需要用到 窗口字符核心 的功能。
3. 字体设置
首先,要找到一款能买免费商用,且粗体与上面相当的字体。
于是我找到了字体:Jellee Bold 。

配置字体的方式,可以结合“23.窗口字符 > 关于字体管理器.docx”来看。 |
将这个字体文件放入font文件夹。

用记事本打开 gamefont.css文件,添加下图的文本结构。
为方便减少后面写字符的数量,起名为 JFont 。

| 注意,字体名称,是双击打开字体文件后,显示的字体名称。不是 字体的文件名 。(有时候下载来的文件名和字体名可能不一样) |
然后插件中配置 字体管理器 插件:
◆Drill_DialogFontFace 窗口字符 - 字体管理器
在预加载中添加新的字体,JFont名称。


这样就配置完成了。
你可以在对话框中,使用窗口字符”\fn[JFont]”,看看字体载入后的效果。

4. 渐变色配置
接下来是渐变色的设计。
前面章节 节点颜色 中提到了多个渐变分段节点的结构。

要实现如下结构,可以这样设计:

0.00浅色,0.49浅色,0.51深色,1.00深色。
这样就能实现一条非常清晰的双色线了。
比如,在ps中取红色的两种颜色。

添加斜向渐变。
由于不好评估渐变方向如何,所以先暂时设定为45度角。

在窗口字符中添加 “\c[216]”因为是高级颜色,所以从200开始。

这里效果就出现了,不过,每个字符都是一个高级颜色,还需要再改进。

5. 字符块测试
窗口字符核心中,具有 字符块 的概念。
即多个字符形成一个整体,能进行 整体变换、整体涂色 等效果。
(详细可以去了解下文档“23.窗口字符 > 关于窗口字符.docx”)
使用 \dts 窗口字符,包裹的文本,将会连成一个整体。

顺带一提,如果你设置的是 \dDCCE 这种跳动字符,那么就不需要加\dCOWCf来包裹了,因为 跳动字符 本身就是一个字符块的结构,所以不需要多此一举。
由图可知,这个斜向渐变,斜角应该再朝着水平方向斜一点。
经过反复调整,决定使用340度比较合适。(即-20度的斜向)

如下图:

如果 有很多字符组成了一个很长的整体,那么这个角度的渐变效果会很一般。
因此你最好需要根据实际情况,随时调整这个斜向角度。
当然,如果你只需要0度这种上下垂直的角度,那么就完全不需要考虑长度问题了。

6. 效果演示
现在字体、渐变色、字符块都配置好了。
注意哦,这些都是通过 窗口字符 实现的。
也就是说你可以在游戏中,大部分窗口里,都能应用这种效果。
比如,事件头顶的文字:加上这些长串的 窗口字符。


(\c[0]让后面的字符恢复白色,\fr恢复默认字体)
(更多窗口字符建议去看看 ”23.窗口字符 > 关于窗口字符.docx”中的 窗口字符表 。)
再比如,让 地图临时漂浮文字,随机显示固定的文本。
具体可以去 UI管理层 看看。
这些文本都是由 窗口字符 组成的 艺术文本。


常见问题(FAQ)
不生效的窗口字符(指向)
如果发现写了窗口字符后,出现“完整\xxx[xx]的格式”或“只有[xx]的格式”,
可以去看看 ”23.窗口字符 > 关于窗口字符.docx” 的常见问题,有详细讲解。
旧存档的物品文本色为黑色
| 问题名称 | 旧存档的物品文本色为黑色 |
| 问题图示 | ![]() |
| 问题描述 | 没有更新插件,只是单纯用插件。游戏里面,新加了一个物品,配置文本色的注释后,物品是黑色的。同理,新加角色、敌人。再加注释颜色,也是黑色。 |
| 出现时机 | > 只有旧存档有,新开游戏 或者 新的存档 不会出问题。 |
| 原理解析 | 此问题属于作者的 旧插件 缺少优化造成的,当时没考虑到这种情况。后面经过分析总结后,作者提炼出了相关知识点的文档,你可以去了解一下:“21.管理器 > 数据更新与旧存档.docx”在2.80版本之后的插件,此问题被解决。 |
| 解决方案 | 更新相关插件至最新版即可。如果更新插件后旧存档直接报错了,那么还是把旧存档删掉吧。 |
