Cat_Anchor 发表于 2026-5-21 06:58:32

我睡得好饱啊

今天是 2026 年 5 月 21 日。写下这段文字的时间是早上 6:32。昨天我只睡了 7 个半小时,其实每天差不多都这点时间睡觉,但是不一样的是,今天早上起来,我一点困倦的感觉都没有。这被我称为“饱和睡眠”。

这种饱和睡眠的发生概率很小,我只遇到过三四次。有时候即使只睡 7 个小时,第二天早上起来我还是精神饱满;而有时就算睡了 10 小时,第二天我还是处于混沌与清醒的交界处,无法自拔。

---

前天上学的时候,我突然冒出来一个关于相机动画的绝妙转场主意。我现在想了想,可能是来源于元素动画的一期幕后杂谈式的节目,那里面不仅有卖营火的烟的村民,还有可以把草地看成水池跳进去的村民。我受到了后者的启发。

如果我们让玩家的相机“跳进地面”,然后瞬间让它在别处出来,那么效果应该会不错。为了增加“跳跃感”,我决定让相机的滚转轴(可以让画面左右倾斜,或者上下颠倒的轴)在摔进地面的同时倾斜 90 度。这样,就好像相机意外摔进了地里,而瞬间从其他地方被反弹回来。

他们很久之前提供的 `camera.playAnimation()` API 正好可以做到我想要的。它是目前唯一一个接受 Z 轴参数的 API,可以让相机倾斜 90 度。它还支持猫条样条(Catmull-Rom Spline),也支持缓动函数的缓动,做出来效果不会很差。

于是说干就干。流程很简单,创建两个样条,一个是相机摔进地面的,另一个是相机弹回空中的。我起初创建了一个猫条样条,但是后来发现它至少需要 3 个控制点,对于我们只有两个控制点的情形来说,这要求还是太高了。于是我转到了线性样条(Linear Spline),它只需要 2 个控制点。

……真的只需要 2 个吗?

很遗憾,由于一些神秘的原因,线性样条实际上需要 3 个控制点,而猫条样条需要 4 个。我只好取第一个控制点,给它一个非常微小的偏移,才能达到控制点的数量要求。而且如果不给它偏移,如果存在两个相邻且相同的控制点,那么根据我的经验,应该就无法创建样条,也无法播放相机动画了,不知道为什么。

创建完样条,接下来就是配置相机的运行情况。有两方面,一方面管理相机在样条上运动的进度条,另一方面管理相机的旋转。两个关键帧,时间相差必须大于 0.05 秒,我们知道那是 1 tick 的时长。一开始,我想当然地以为可以等于,但是就算等于 0.05 秒也不行,必须大于。我把它设置成 0.051 秒,反而可以了。

最后还有最难的一关,无论怎么播放相机动画,相机就是不动!我研究了半天,传参一点问题也没有,调试了好久都没什么头绪。于是我打开了之前做的相机缓动动画的代码,最后发现,应用相机动画之前,要先将相机设为 `minecraft:free`!

最后很简单了,调整一下代码的时序,两个样条动画之间留出 1 tick 缓冲时间,这个效果很快做完了。

bili:BV1rCLB6HEFp

mc_noch 发表于 2026-5-21 17:28:35

不错,又占了一个沙发!
页: [1]
查看完整版本: 我睡得好饱啊