top of page
H-CHRO_edited.png


染色射击第三人称空间解谜demo
开发时长14天,2024
独立完成


关键词:射击染色  |  机制 x 空间  |  Unity固有误差克服






万色殿
Chromonon



0  简介
 

玩家需要在这座方形神殿中先后掌握3种不同的染色能力。这些能力具有不同的物理 & 特殊效果。玩家需灵活对环境染色 & 激活机关以攀上中央高塔。

开发过程独立完成,时长两周。在对染色机制可能性进行挖掘的基础上,我集中组织了若干组关卡空间,用空间构成能力锁,并配合其它机关来完善染色能力的发挥空间,形成了谜题的整体结构。

​技术上,Unity内置的collider和deltaTime系统存在固有误差,难以实现理想运动(如保持高度的弹跳、无摩擦滑动等),且难以控制多个颜色表面碰撞带来的运动效果。鉴于此,我尝试手写大部分物理运算,并进行总能量跟踪处(详见下文)。

 

a5be06e952d448ece787022f41b64a6.jpg
b44e492e119554f9110c3e83fc1250e.jpg



简介视频(1分钟):
 



1  染色机制探索

 
主角的染色能力决定了其在三维空间当中的机动性。因此在设计过程中,三种染色能力都尽量和主角在空间中的移动方式强相关(保持高度的完美弹跳、无法控制的向前滑行 & 任意面漂浮)。此外,射击要素的加入对玩家的发射角度提出了要求,也进一步指导空间谜题的设计。

游戏中涉及到“染色”的可互动物件有:地板瓦片(tile)、主角、子弹、方箱子等。此外,电路元件(检测环、压力板、机关门等)、不祥之眼、禁忌区域、玻璃、阻拦网等机制和元件也辅助空间设计本身,对染色机制加以进一步的限制

​开发初期,我对不同互动物件之间的染色机制、互动规则和代码框架进行初步实现。具体而言,主要考虑 “箱子——主角——地板” 这三者之间的两两关系。

 

 

使用若干“游乐场”以供快速迭代 & 逐渐体会机制带来的游戏节奏和“感觉”——关卡可以是节奏很快的跑酷、飞檐走壁、“镜之边缘”,也可以是安静解谜、“狙击手”伺机而动的静谧箱庭。并且在“游乐场”中,我对各种颜色进行拓展试验,发展出“绿色颜料反弹子弹”、“墙面绿色颜料推开玩家”、“蓝色颜料可扩散其它颜料”等机制,而这些机制的对抗面则是消灭子弹的“禁忌区域”和“不祥之眼”——玩家可以利用颜料的性质,使自己、使更多颜料出现在本不能够到达的空间中。

 

6b06e037c7d45769009d7252433d793.png



2  空间关卡设计


三种染色的主要机制(完美弹跳、 快速滑行、颜料扩散、吸附漂移)能够让玩家到达更高、更远的地方——后两者也是空间对玩家构成的主要能力考验。

​因此,demo尝试围绕中央通高区域布置三个次一级的大空间作为标志性区域,并使用螺旋动线串联起标志性区域周围的小谜题。

 

4de1ff4bae0a81098fee40773ed9e2c.png
未标题-1.png


玩家会反复回到同一处大空间,感受拥有新能力后的变化。在前两处大空间中,玩家均会先看到区域目标(获得对应的颜色符文),再经由“教学”区域获得符文后回到大空间、使用能力跨过空间到达另一区域;而后再经由另一串更难的“综合”谜题,之后再度回到大空间进行第二次解谜。
 

f5f7f9b7982a30187a29f0ddfcd330a.png


3  技术实现
 

综合使用Trigger、Raycast等方法实现子弹发射、染色检测、颜料寿命管理等。通过Trigger的方向记录 & 碰撞面类型以分类讨论 & 判断碰撞执行的类型。(如:主角碰到竖直绿色面 / 箱子黄色底面碰到蓝色顶面 / 箱子绿色顶面碰到另一个箱子的绿色顶面...... 每一种情况都需要分类讨论
 

由于Collider检测 & deltaTime的固有误差,弹跳的高度会越来越小直到速度为0后物体落地。因此,我引入了能量守恒公式,将动能和重力势能加和得到一个确定值,当箱子 / 主角运动时,其速度会实时根据高度反推,并对目前速度进行修正,有效解决了速度磨损的问题。当运动物体受到非弹性碰撞时,能量更新。
 


主角移动&动作相关:对Unity第三人称预设进行“魔改”。Unity自带的第三人称Player是基于Character Controller实现的,与场景中Trigger和自己写的脚本物件的交互困难 & 粗糙。因此,我在角色外侧套了一层由6个Trigger组成的Box套住Player,并把自己写的脚本接入Player运动实现逻辑中。
 



 更进一步...?
 

1)  优化存在一定问题,游玩时fps不稳定,加载过慢(甚至build出来再运行都能好些)。尝试根据角色进出情况对场景tile进行分区加载,优化效果不明显。在profiler进行深度跟踪,锁定rendering和others部分很吃性能。若重头再来,倾向于动态生成trigger mesh(而不是每个tile都带一个mesh),且以数学方式进行运算(而不是托付给用一个逐渐膨胀的trigger去碰范围内的tile trigger......)

2) 限于上述原因,关卡迭代效率受一定影响,且在最初规划时不敢规划过大的关卡体积(会使tile数量立方级增长)。然而回顾来看,部分空间显得有些逼仄,可以适当加大,减少camera碰撞概率,且给美术更多发挥空间;

3) 染色的底层机制可以加强——某些关卡(如箱子永动机)对染色的精确度要求过高,目前只能用特殊属性的tile(绿色Only)来限制,但这就有点剧透了。改进方向有二:一是使染色变成长按划线(类似于antichamber中吐方块),二是缩小tile大小,或者更换染色底层逻辑(如视觉decal切割 + 根据碰撞点法向来实例化一堆trigger?这样能让场景变得更加自然,且不一定都是正交了)

 


5  完整体验视频
 


Unity Package下载(可能无法Play)
https://pan.baidu.com/s/1jOzwBixTx8P-cUvzYA7k5g?pwd=bpt1


P. S.
Shader:Glass ( Ciconia Studio ) , ShockWave
SFX:《Enter the Gungeon》, 《the Talos Principle》
BGM:《the Talos Principle》
Humanoid Basics & Animation: Unity Official, Mixamo




——————————————————   完   —————————————————

bottom of page