相机
相机是 VN 的关键元素,通过将相机放入场景中,我们得以确立玩家的观察视角(Viewport)与视锥体范围,从而决定了哪些场景内容会被投影为最终画面。
即使不进行任何注册,ShxNovel 也会自动生成一个默认的正交相机,被命名为 main。在默认情况下,这个相机已经被添加到 main 场景中。
Camera
Section titled “Camera”在脚本中,可以使用 camera 函数来使用在 World 中注册的相机。
const view = camera("co_main");camera("co_main");- 这里的
co前缀表明这是一个正交相机(Orthographic); - 类似地
cp前缀表明这是一个透视相机(Perspective); - 而
main则是在 World 中定义的名称。
const view = camera("co_main");camera函数将返回一个场景句柄,在这个示例中,我们将它赋值给view变量。
instant
Section titled “instant”instant 是立即发生的动效(不会产生动画)。
view.instant(p => {});- 请参见 通用指令。
animate
Section titled “animate”animate 是一个动效,它会产生动画。
view.animate(p => { p.duration(1000); p.ease("none");});这里的通用指令,指的是 instant 和 animate 通用的指令。
下面的代码仅以 animate 为例, 在其他动效内的用法完全一致。
应用位置变换。未被修改的属性将保持原值。
view.animate(p => { p.x(100); p.y(100); p.z(0);
p.pos(100, 100); p.pos(100, 100, 0);});应用旋转变换。使用欧拉角(Euler Angles)控制对象的姿态。未被修改的属性将保持原值。
- x (俯仰/Pitch): 效果形如点头。物体会绕着横向轴旋转。
- y (偏航/Yaw): 效果形如摇头。物体会绕着纵向轴旋转。
- z (翻滚/Roll): 效果形如侧翻。物体会绕着视线方向旋转。
// 单位为角度view.animate(p => { p.rotate({ x: 0, y: 0, z: 60 });});zoom 用于缩放相机视口,类似于相机的数码变焦,仅放大画面,不改变透视关系。
view.animate(p => { p.zoom(0.5); p.zoom(1.5);});view.animate(p => { p.timelabel("enter"); // 设置时间轴标签});关于 timelabel,请参阅 动效时间轴