大纲
教程/心得
- NoahCrawfish: 平台跳跃游戏的镜头没你想的那么简单 (视频)
- 冰激凌的镜头教程 (文字)
- bits-像素的镜头教程 (文字)
- 星夜祈梦的镜头教程 (视频)
- Celeste Camera in 3 Levels of Complexity by Gamation
- Everest Wiki 的镜头教程
Camera Offset
Camera Offset
一般情况下, 镜头会始终以玩家为中心跟随, Camera Offset 则表示镜头以 偏离玩家多少方向为中心跟随,
Camera Offset Trigger 就是用来设置这个 Camera Offset 的, 比如我们将 Camera X 设置为 1, 那么镜头中心就会向右偏移, 像下面这样
你可以启用 Celeste TAS, 按下 Ctrl+B 打开碰撞箱显示, 按下 Ctrl+N 打开简化图形, 按下 Ctrl+M 打开镜头居中显示并使用鼠标滚轮缩放镜头或是使用鼠标右键拖动镜头 (双击鼠标右键重置)
此时你就能看到图中的效果了, 其中淡蓝色的框对应实际的镜头范围, 你可以通过这种方式观察镜头的运动
示例
注意事项
- 如果镜头范围超出房间外了, 游戏还是会把镜头锁在房间范围内的
- 进入房间时,
Camera Offset会重置为房间对应的Camera Offset的值 - 蔚蓝的坐标系与平时常见的平面直角坐标系相同, 只不过 y 轴方向向下, 所以
Camera Y设置的越大镜头越往下
Smooth Camera Offset
更丝滑的
Camera Offset Trigger
Smooth Camera Offset Trigger 会根据你在 Trigger 中的相对位置来设置 Camera Offset, 比如当你的 Position Mode 设置为 LeftToRight 时, 如果你在 Trigger 里偏左边的位置, 那么
Camera Offset 就会被设置为偏向 Offset XFrom 的值, 如果你在 Trigger 里偏右边的位置, 那么 Camera Offset 就会被设置为偏向 Offset XTo 的值, 其他 Position Mode 同理
示例
注意事项
- 如果你没有正确摆放你的
Smooth Camera Offset Trigger可能会导致Camera Offset被错误的设置 - 如果在进入
Smooth Camera Offset Trigger前玩家的Camera Offset不确定, 可能导致Smooth Camera Offset Trigger无法确定一个合适的起始Offset From
Position Mode
在 Smooth Camera Offset Trigger 部分我们已经浅浅体验过了 Position Mode 的作用, 这里我们再补充说明一下
游戏会根据玩家在 Trigger 内的相对位置和 Position Mode 的设置来计算出一个相对均匀变化的 0 ~ 1 的值, 这样在后续使用中通过这个值来改变镜头的某些参数时, 具体的表现相对就会更加温和丝滑
NoEffect: 默认为1LeftToRight: 从左到右0 ~ 1RightToLeft: 从右到左0 ~ 1TopToBottom: 从上到下0 ~ 1BottomToTop: 从下到上0 ~ 1HorizontalCenter: 从左到中间0 ~ 1, 从右到中间0 ~ 1VerticalCenter: 从上到中间0 ~ 1, 从下到中间0 ~ 1
Momentum Camera Offset
需要下载并启用 Furry Helper
类似于 Smooth Camera Offset, 但是 Position Mode 换为由速度控制
Momentum From,Momentum To: 速度映射范围, 例如当速度小于Momentum From, 游戏会使用Offset From, 当速度大于Momentum To, 游戏会使用Offset To, 当速度在Momentum From到Momentum To之间时, 游戏也会使用Offset From到Offset To之间的一个相对值Momentum Mode: 表示使用玩家水平速度来映射还是垂直速度来映射 (似乎没有合速度选项)
Flag Toggle Camera Offset
需要下载并启用 Maddie's Helping Hand
很多其他带 Flag 的镜头 Trigger 都是类似的, 这里不会全列出来
Camera Offset Trigger 的带 Flag 版本 (虽然你也可以用 Eevee 的 Flag Toggle Modifier 超级拼装)
Flag: 当 Flag 存在时, Trigger 才启用Inverted: 若勾选, 则当 Flag 不存在时, Trigger 才启用
Speed Adaptive Camera
需要下载并启用 Chronia Helper
根据玩家的速度调整 Camera Offset
Camera Mode:normal: 该 Trigger 会控制 X/Y 方向的Camera OffsetX Only: 该 Trigger 只会控制 X 方向的Camera OffsetY Only: 该 Trigger 只会控制 Y 方向的Camera Offset
Flag Control:disabled: 不使用Flag控制该 TriggerflagNeeded: 使用Flag控制该 Trigger 是否生效flagInverted: 使用Inverted Flag, 即反转后的Flag控制该 Trigger 是否生效
Multiplier X/Y: 速度对Camera Offset影响的倍率Trigger Mode:toggle: 离开 Trigger 后不会再改变Camera OffsetinZone: 离开 Trigger 后会将Camera Offset重置为进入时的状态
Only Once: 离开 Trigger 后是否销毁该 Trigger
Axis Camera Offset Trigger
需要下载并启用 Chronia Helper
可以细微调整 Camera Offset 的 X/Y 维度, 属性与 Speed Adaptive Camera Trigger 类似
Units: 表示你填入的Camera X/Y的单位offset: 默认基本单位, 即 X 方向48 px一单位, Y 方向32 px一单位offsetSquared: X 方向48 px一单位, Y 方向48 px一单位tiles:1 tile==8 pxpixels: 以像素为单位
Camera Speed
Camera Catchup Speed
需要下载并启用 Maddie's Helping Hand
相机运动计算公式
\(camera.position = lerp (camera.position, camera.targetPosition, 1 - (0.01 / CatchupSpeed) ^ {0.0167})\)
Catchup Speed: 改变相机的跟随速度, 常用在高速场景Revert On Leave: 表示 Trigger 是触碰后永久生效还是只在内部生效
Camera Border
Camera Offset Border
需要下载并启用 Maddie's Helping Hand
该 Trigger 常被用作 "镜头墙" 来阻挡镜头的移动
示例
属性介绍
Top Left, Top Center, Top Right, Center Left, Inside,
Center Right, Bottom Left, Bottom Center, Bottom Right, 表示 9 个方位, 像下面这样
该 Trigger 会在玩家处在对应方位且对应属性勾选的情况下 生效
当 Trigger 生效且镜头跟该 Trigger 有重叠时, 触发阻挡机制, 如下:
- 当玩家在该 Trigger 右侧的左方, 且上述任意带
Left字眼的属性勾选, 相机会向左移动直到相机右侧跟 Trigger 左侧贴合 - 当玩家在该 Trigger 左侧的右方, 且上述任意带
Right字眼的属性勾选, 相机会向右移动直到相机左侧跟 Trigger 右侧贴合 - 当玩家在该 Trigger 上侧的下方, 且上述任意带
Bottom字眼的属性勾选, 相机会向下移动直到相机上侧跟 Trigger 下侧贴合 - 当玩家在该 Trigger 下侧的上方, 且上述任意带
Top字眼的属性勾选, 相机会向上移动直到相机下侧跟 Trigger 上侧贴合
以上规则按顺序判断, 任意一条生效后后续规则都不再执行
在大多数情况下, 你只需要把对应方向的属性勾上, 把该 Trigger 视作一道阻碍镜头移动的镜头墙即可
Flag: 除了上述条件, Trigger 的生效还取决于场景中是否有对应 Flag (留空这个选项就不生效)Inverted: 是否反转 Flag 的效果, 如果反转那么只有当场景里没有对应 Flag 的时候 Trigger 才生效
Camera Hard Border
需要下载并启用 Prog Helper
该 Trigger 用来 "阻挡" 镜头的移动, 作用/用法类似于 Camera Offset Border Trigger, 但是这个 Trigger 造成的镜头阻挡是瞬间的, 而不是慢慢移动到对应位置
Camera Target
Camera Target
当你进入该 Trigger 时, 镜头会移动到该 Trigger 节点对应的位置
示例
属性介绍
Lerp Strength: 镜头移动速度, 如果数值小于1, 那么在减慢镜头移动速度的情况下镜头会更偏向原来的位置而不是节点的位置, 如果数值大于等于1, 那就是单纯的加快镜头移动速度Position Mode: 与 Smooth Camera Offset 类似, 游戏会根据你在 Trigger 中的相对位置算出一个0 ~ 1的百分比值, 用于计算镜头原来的位置到 Trigger 节点位置的插值, 比如1对应 Trigger 节点位置,0对应原位置 (相当于 Trigger 不生效)X Only: 该 Trigger 是否只锁 X 方向Y Only: 该 Trigger 是否只锁 Y 方向Delete Flag: 如果房间加载时此 Flag 存在, 那么该 Trigger 就不会被加载, 如果是加载后此 Flag 存在, 那么只起到不让 Trigger 生效的作用, Trigger 已造成的更改并不会复原
Camera Advanced Target
与 Camera Target Trigger 类似, 但是可以精细调整 X/Y 方向的 Lerp Strength 和 Position Mode
Camera Target Corner
需要下载并启用 Honly Helper
作用类似于 Camera Target Trigger, 但是 Position Mode 从对角开始算, 而不是水平或是垂直
Camera Target Crossfade
需要下载并启用 Honly Helper
作用类似于 Camera Target Trigger, 但是带两个 target 节点, 最终的实际 target 会通过 Position Mode 计算出来的值在两点之间插值
Smoothie Camera Target
需要下载并启用 Sardine7 Helper
作用与 Camera Target Trigger 类似, 但是可以控制 X/Y 两个维度
Camera Zoom
Eased Camera Zoom
需要下载并启用 Frost Helper
Target Zoom: 镜头放大倍率, 如果要缩小镜头, 请使用 Camera ZoomEasing: 镜头缩放时的缓动, 也就是线性缩放, 还是先快后慢, 先慢后快等Eased Duration: 镜头缩放所需时间Revert On Leave: 表示离开 Trigger 后是否要恢复镜头缩放Revert Mode:Revert To No Zoom: 表示离开 Trigger 后恢复镜头缩放至默认值Revert To Previous Zoom: 表示离开 Trigger 后恢复镜头缩放到进入 Trigger 那一刻记录的镜头缩放值
Focus On Player: 表示是否让玩家居中在镜头内 (镜头似乎会抖动)Disable In Photosensitive Mode: 表示在玩家开启光敏模式的前提下是否禁用该 Trigger, 以避免触发光敏癫痫
Camera Zoom
需要先配置好拓展镜头 Extended Camera Dynamics 并启用
Zoom Start: 镜头缩放起始值Zoom End: 镜头缩放结束值Mode:Start: 碰到 Trigger 后就将镜头缩放设置为Zoom StartLeftToRight: 类似 Position Mode, 从左到右Zoom Start ~ Zoom EndRightToLeft: 类似 Position Mode, 从右到左Zoom Start ~ Zoom EndTopToBottom: 类似 Position Mode, 从上到下Zoom Start ~ Zoom EndBottomToTop: 类似 Position Mode, 从下到上Zoom Start ~ Zoom End
Delete Flag: 当 Flag 存在时,Camera Zoom不再更新镜头缩放, 当然你走出去缩放还是会恢复的 (留空表示该选项不起作用)Is Max: 表示拖动上界滑块还是下界滑块
想象一个带一个双滑块的滑动条
默认情况下
1 2 3 | |
中的 RestingZoomFactor 会作为左右滑块的初始值, 通过 Camera Zoom Trigger 修改滑块的位置后, 默认情况下拓展镜头最终的 Zoom 会选取上界滑块也就是右侧滑块对应的值
那么这有什么作用呢, 想象一个场景, 玩家从左向右进入 Camera Zoom Trigger,
Is Max 取消勾选, Mode 为 LeftToRight, Zoom Start 为 0, Zoom End 为 2, 你猜会发生什么
- 只有当玩家走到中间时, 镜头才会发生变化, 因为此时左侧滑块才开始推动右侧滑块, 而
Zoom的值是由右侧滑块决定的 - 当镜头发生变化, 玩家往回走时, 镜不会发生变化, 因为此时左侧滑块往左移动不影响右侧滑块, 而
Zoom的值是由右侧滑块决定的
所以起到了一个单向变化的作用
Camera Rotate
Change Camera Angle
需要下载并启用 AvBday Helper
Angle: 以镜头左上角为支点顺时针旋转镜头Angle角度
Fade Camera Angle
同 Change Camera Angle Trigger, 但是带 Position Mode
Others
Camera Correction Controller
需要下载并启用 Adam's Add-ons
出于浮点数精度等原因, 镜头有时可能跟预期位置偏差 1px, 所以这个实体就是用来补偿这个偏差的 (放在房间内即可)
World Camera
需要下载并启用 bits & bolts
World Camera 是一个实体, 会将子节点处对应的画面渲染到主节点处, 可用 Flag 控制是否生效
Camera Constraint
需要下载并启用 Prog Helper
该 Trigger 用来限制 Camera Offset 的上界和下界, 它的限制效果会在玩家死亡后消失 (需要重新设置), 切板之类的不会
适合用在高速场景
Min X:Camera Offset X最小能是多少Max X:Camera Offset X最大能是多少Min Y:Camera Offset Y最小能是多少Max Y:Camera Offset Y最大能是多少Has Min X:Min X是否生效Has Max X:Max X是否生效Has Min Y:Min Y是否生效Has Max Y:Max Y是否生效Flag: 是否当Flag存在时才启用该 Trigger (需要在进入 Trigger 前设置, 在内部设置无效)Inverted: 是否反转Flag的效果Only Once: 是否在 Trigger 触发后销毁自己
One Way Camera
其实叫
One-Way Camera, 搜One Way搜不到需要下载并启用 Maddie's Helping Hand
在该 Trigger 内部时, 镜头只能往某个方向移动, 适合不怎么往返的路线, 减少镜头的晃动
示例
属性介绍
Left: 镜头是否能向左移动Right: 镜头是否能向右移动Up: 镜头是否能向上移动Down: 镜头是否能向下移动Flag: 当Flag存在时, 该 Trigger 才会生效 (留空表示该选项不起作用)Block Player: 是否阻挡玩家, 当启用时- 如果
Left未勾选, 则在镜头左侧生成屏障 - 如果
Right未勾选, 则在镜头右侧生成屏障 - 如果
Up未勾选, 则在镜头上侧生成屏障 - 如果
Down未勾选, 则在镜头下侧生成Kill Box
- 如果
比如如果 Block Player 勾选, 且只勾选 Right, 效果会像这样
Reel Camera
需要下载并启用 Saladim Helper
当玩家触碰到该实体时, 相机会先花费 Start Move Time 时间移动到第一个节点, 之后经过 Start Delay 开始逐节点移动
你可以通过设置 Delay Sequence 和 Move Time Sequence 来调整后续镜头移动前的等待时间和移动所花时间, 用逗号分隔且长度必须刚好等于 节点数 - 1, 也就是镜头会往下一个节点走, 然后停一下,
然后接着往下一个节点走, 滚动完后返还镜头控制权
Set Offset On Finished: 是否在滚动结束后设置玩家的Camera OffsetOffset X:Camera Offset X对应的值,Camera Offset Trigger的Camera Offset X1 单位对应这里 48 单位Offset Y:Camera Offset Y对应的值,Camera Offset Trigger的Camera Offset X1 单位对应这里 32 单位
正常情况下, 当你触发该实体后,
- 如果玩家掉落到镜头下方, 则会被杀死
- 如果玩家超出镜头左右范围则不会被杀死且位置会被限制回镜头内, 但是开启
Squash Horizontal Area后会被杀死 - 如果玩家超出镜头上方时则不会被杀死且位置会被限制回镜头内, 但是如果镜头正在向下运动或是有向下运动的趋势时玩家会被杀死
Camera Entity Target Controller
需要下载并启用 Game Helper
该控制器可以用来控制镜头的跟随对象
Only Type: 需要跟随的对象对应的类名, 比如跟随 Theo 水晶可以填写Celeste.TheoCrystal, 如果有多个对象则找一个最近的跟随Offset X:Camera Offset X对应的值,Camera Offset Trigger的Camera Offset X1 单位对应这里 48 单位Offset Y:Camera Offset Y对应的值,Camera Offset Trigger的Camera Offset X1 单位对应这里 32 单位Lerp: 表示镜头在玩家镜头位置跟这个新的镜头位置之间的插值, 范围0 ~ 1(当然你填超出范围的数也是没问题的, 因为没clamp)Reset On False: 勾选后, 当Flag不存在镜头会跟随到玩家, 当Flag存在, 镜头会跟随上述找到的对象Debug: 输出一些跟上述找到的对象有关的信息






























