====== 基础知识 ======
引擎允许将游戏中的一个3D造型划分为多个 Part,然后组合起来,就是一个完成得大模型(比如一个完整的人物角色)。如下,A, B, C, D, E 表示不同的 Part。Part 的划分因游戏而异,游戏中可以通过替换每个 Part 上的模型、贴图、颜色、特效,来得到不同的换装效果。
AAAAAA F
A A F
AAAAAA F
BB FFF
CCCCCCBBDDDDDF
BB
EE EE
EE EE
EE EE
对于一个 Part,可以由以下几个部分组成 PS/RS/E/C。
PS - piece (模型)
RS - render style (贴图)
E - effect (特效)
C - color (颜色)
注意,除了 Part 外,每个3D造型上还可以有多个挂点(socket),挂点上可以挂接其他的3D造型,比如拿武器,就可以如此来实现。
====== 策划需求 ======
需求:游戏中的每个道具,可以影响多个 Part。比如:装备了一个'上身套装',其实是同时换了 B, C, F (两个 Part、一个 socket)的内容。
同样一个造型的装备,可以有不同的颜色。
====== 程序设计 ======
服务器上的一个道具,具有 iType, iShape, iColor, iIcon 四个值。其中 iType 表示装备的数值类型,比如装备上了'帽子',则增强了 10% 的防御效果。而 iIcon 决定了客户端物品栏上的图标样式。而 iShape 决定了此装备会给 3D造型 加入 哪几个Part,以及每个 Part 上对应的 PS/RS/E;而 iColor 决定了此 Part 的颜色。
客户端收到 iShape, iColor 后的处理逻辑如下:
|
[逻辑层] | [绘制层]
|
| +--------------------+
+----------+ +----------+ / -> | Part1, Part2, ... |
| | | atom1, | /| +--------------------+
| iShape | => | atom2, | = |
| | | ... | \| +---------------+
+----------+ +---------+ \ -> | socket1, ... |
| +---------------+
客户端有个 atom table,类似:
atom_tbl = {
[1] = { ..., type = "socket", },
[2] = { ..., type = "part", },
...,
}
每个 atom 只对一个 part 或 socket。而一个 iShape 可以对应多个 atom。
如此,就可以把玩法上装备的3D造型(表现效果),与客户端联系起来了。为何 iColor 不作为 iShape 中描述的一部分,是依据具体情况的特殊设定。
评论