meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| scripting:client:camera [2024/06/18 07:06] – bibiboxs | scripting:client:camera [2025/12/03 10:33] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 4: | 行 4: | ||
| 在`Camera`类操作中,开发者可修改**玩家本地状态**下的相机属性。 | 在`Camera`类操作中,开发者可修改**玩家本地状态**下的相机属性。 | ||
| - | 有关本文档的属性**绝大多数**属于场景生命周期,再切换世界\场景后将会重置设定。 | + | [note2] |
| + | |||
| + | **注意:控制==非玩家自身角色==外的其他对象或相机功能,均属于“观察模式”,在观察模式下无法操作玩家自身角色。** | ||
| + | |||
| + | (例如:观察对象非玩家自身角色、其他相机观察模式等) | ||
| + | |||
| + | [/note] | ||
| + | |||
| ## Property | ## Property | ||
| 行 15: | 行 23: | ||
| > | > | ||
| > **不同游戏视角会衍生不同的游戏效果,例如2.5D视角主要是平面射击,第三人称视角则是根据准星自由射击、交互等。** | > **不同游戏视角会衍生不同的游戏效果,例如2.5D视角主要是平面射击,第三人称视角则是根据准星自由射击、交互等。** | ||
| - | > | ||
| - | > **==注意:此属性的修改会改变`Camera`其他属性,已达到最终的视角预制效果(例如`Distance\Sway\Offset`等属性),如果开发者有多个自定义视角的修改需求,建议将修改视角封装成多个方法(如下代码示例)。==** | ||
| ```javascript | ```javascript | ||
| 行 27: | 行 33: | ||
| | 1 | 第一人称视角< | | 1 | 第一人称视角< | ||
| | 2 | 第三人称视角< | | 2 | 第三人称视角< | ||
| + | |||
| + | [note2] | ||
| + | **==注意:第一人称、第三人称视角仅在【鼠标隐藏】情况下正常镜头转向,以避免此视角下【激活或移动鼠标+操作UI】时晃动。==** | ||
| + | |||
| + | **反之亦然,通常鸟瞰视角也应在【鼠标可见】情况下正常操作角色。** | ||
| + | (相关API:`GUI.SetCursorActive()`) | ||
| + | [/note] | ||
| + | |||
| + | [note2] | ||
| + | **==注意:此属性的修改会改变`Camera`其他属性,已达到最终的视角预制效果(例如`Distance\Sway\Offset`等属性),如果开发者有多个自定义视角的修改需求,建议将修改视角封装成多个方法(如下代码示例)。==** | ||
| + | [/note] | ||
| ```javascript | ```javascript | ||
| - | //第一人称 | + | //FPS |
| function ChangeCameraMode0() | function ChangeCameraMode0() | ||
| { | { | ||
| 行 36: | 行 53: | ||
| } | } | ||
| - | //第三人称 | + | //TPS |
| function ChangeCameraMode1() | function ChangeCameraMode1() | ||
| { | { | ||
| 行 49: | 行 66: | ||
| ### Camera.Pos | ### Camera.Pos | ||
| - | > 获取(只读)相机(游戏的眼睛)世界空间位置。 | + | > 获取(只读)相机焦点(游戏的眼睛)世界空间位置。 |
| + | > | ||
| + | > 游戏视角位置的控制应该使用`Camera.Mode | LookAt | RoamPoint`等方法进行引擎自动跟随,而不需要手动每帧编写跟随。 | ||
| ```javascript | ```javascript | ||
| 行 59: | 行 78: | ||
| ### Camera.EulerAngle | ### Camera.EulerAngle | ||
| - | > 获取(只读)相机(游戏的眼睛)世界空间角度。 | + | > 获取(只读)相机焦点(游戏的眼睛)世界空间角度。 |
| ```javascript | ```javascript | ||
| 行 69: | 行 88: | ||
| ### Camera.Target | ### Camera.Target | ||
| - | > 设置一个相机跟随对象(Entity),通常用于跟随`Character\Vehicle`,**多数情况下应该优先使用此属性**。 | + | > 设置相机**跟随对象**(仅限`Character`对象),多数情况下应该**优先**使用此属性,此属性**跟随优先级**最高。 |
| > | > | ||
| - | > 设置为`null`时则不跟随任何对象,转而跟随`Camera.TargetPos`坐标。 | + | > 设置**非玩家自身角色**可用于观察(观战),此模式下会跟随**目标对象**的角度,因此`VAngle | HAngle`修改不会生效。 |
| + | > | ||
| + | > 设置为`null`时则不跟随任何对象,转而尝试跟随`Camera.TargetPos`坐标。 | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | 注意:控制**非玩家自身角色**的其他对象,将切换至**观察模式**(`Camera.IsObserver == true`)。 | ||
| + | |||
| + | [/note] | ||
| ```javascript | ```javascript | ||
| 行 82: | 行 109: | ||
| ### Camera.TargetPos | ### Camera.TargetPos | ||
| - | > 设置一个相机目标位置坐标(Entity),如果`TargetPos`被激活设置,`Camera.Target`将会被自动置空(因为两个属性不能同时跟随兼容)。 | + | > 设置相机**跟随坐标**,如果`TargetPos`被激活设置,`Camera.Target`将会被自动置空(两个属性无法同时兼容)。 |
| > | > | ||
| - | > 如果`Camera.Target`存在对象,即使`TargetPos`属性不为空,也仍然只会跟随`Camera.Target`而不是`Camera.TargetPos`。 | + | > 如果`Camera.Target`存在对象(优先),即使`TargetPos`属性不为空,也仍然只会跟随`Camera.Target`而不是`Camera.TargetPos`。 |
| ```javascript | ```javascript | ||
| Camera.TargetPos = Vector(0, 0, 0); | Camera.TargetPos = Vector(0, 0, 0); | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.IsObserver | ||
| + | |||
| + | > 获取当前相机是否为**观察模式**。 | ||
| + | > | ||
| + | > 注意:控制**非玩家自身角色**外的其他对象或相机功能,均属于**观察模式** | ||
| + | |||
| + | ```javascript | ||
| + | Camera.IsObserver: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.IsIndoors | ||
| + | |||
| + | > 获取当前相机是否为**处于室内**(相机上方被物体遮挡)。 | ||
| + | |||
| + | ```javascript | ||
| + | Camera.IsIndoors: | ||
| ``` | ``` | ||
| 行 96: | 行 145: | ||
| > 设置相机跟随对象的**本地坐标偏移**,默认为`Vector(0, | > 设置相机跟随对象的**本地坐标偏移**,默认为`Vector(0, | ||
| > | > | ||
| + | > **注意:由于第一人称视角的特殊性,此属性将被忽略。** | ||
| ```javascript | ```javascript | ||
| 行 141: | 行 191: | ||
| ### Camera.SlowMode | ### Camera.SlowMode | ||
| - | > 设置相机**慢动作模式**开关,激活后相机将以慢速延迟移动视角。 | + | > 设置相机**慢动作模式(半速插值)**开关(不支持**常规跟随视角**),激活后相机将以慢速延迟移动视角。 |
| > | > | ||
| - | > **注意:此模式更适合用于`FreeMode`自由模式,在漫游模式下鼠标将会差值慢速移动,适合拍摄视频、漫游浏览。** | + | > **注意:此模式更适合搭配`FreeMode`自由视角模式,在漫游模式下鼠标将会差值慢速移动,适合拍摄视频、漫游浏览。** |
| ```javascript | ```javascript | ||
| 行 156: | 行 206: | ||
| > | > | ||
| > **注意:此模式优先级最高,启用后将暂时屏蔽其他相机模式,同时开启模式并不会屏蔽控制角色移动(如果存在操纵角色\载具,仍然可进行移动等行为,如果不希望这样,可以自行编写相关冻结逻辑(Frozen),以达到漫游模式时停止控制)。** | > **注意:此模式优先级最高,启用后将暂时屏蔽其他相机模式,同时开启模式并不会屏蔽控制角色移动(如果存在操纵角色\载具,仍然可进行移动等行为,如果不希望这样,可以自行编写相关冻结逻辑(Frozen),以达到漫游模式时停止控制)。** | ||
| + | |||
| + | [note2] | ||
| + | **提示:此模式不会修改鼠标可见状态,因此通常应该手动关闭鼠标可见,已达到随鼠标自由旋转。** | ||
| + | |||
| + | 此模式下移动、旋转速度受到`SmoothTime`、`RotateSpeed`影响。 | ||
| + | |||
| + | [/note] | ||
| ```javascript | ```javascript | ||
| 行 201: | 行 258: | ||
| ### Camera.RotateSpeed | ### Camera.RotateSpeed | ||
| - | > 设置相机**旋转角度**的差值速度,默认为`2.0`。 | + | > 设置相机**旋转角度**的插值速度(非鼠标灵敏度),默认为`2.0`。 |
| > | > | ||
| + | > 此类属性仅对**鸟瞰视角、激活受支持的`SlowMode`视角、相机观察行为**等生效。 | ||
| ```javascript | ```javascript | ||
| 行 212: | 行 270: | ||
| ### Camera.VAngle | ### Camera.VAngle | ||
| - | > 设置相机跟随的**上下角度**,默认为`50.0`(举例:设置`90.0`则为鸟瞰2D视角)。 | + | > 设置相机跟随的**上下角度**,默认为`0.0`(举例:设置`45.0`则为向下45度看,反之`-45.0`表示向上看)。 |
| + | > | ||
| + | > **注意:此方法更偏向于修改`Camera`自身的角度,如果玩家正在控制自身角色,实际上可能修改的是`player.FocusVAngle`(映射)。** | ||
| ```javascript | ```javascript | ||
| - | Camera.VAngle = 50.0; | + | Camera.VAngle = 0.0; |
| ``` | ``` | ||
| 行 223: | 行 283: | ||
| > 设置相机跟随的**横向角度**,默认为`0.0`。 | > 设置相机跟随的**横向角度**,默认为`0.0`。 | ||
| + | > | ||
| + | > **注意:此方法更偏向于修改`Camera`自身的角度,如果玩家正在控制自身角色,实际上可能修改的是`player.FocusHAngle`(映射)。** | ||
| ```javascript | ```javascript | ||
| 行 232: | 行 294: | ||
| ### Camera.Distance | ### Camera.Distance | ||
| - | > 设置相机跟随对象的距离,默认为`10.0`。 | + | > 设置相机**跟随对象距离**,默认为`10.0`。 |
| > | > | ||
| > **注意:在开启`AutoDistance`属性后,因为其自动距离机制,可能不会完全按照`Distance`所设定的距离执行。** | > **注意:在开启`AutoDistance`属性后,因为其自动距离机制,可能不会完全按照`Distance`所设定的距离执行。** | ||
| 行 244: | 行 306: | ||
| ### Camera.DistanceSpeed | ### Camera.DistanceSpeed | ||
| - | > 设置相机跟随**对象距离**的差值速度,默认为`1.0`。 | + | > 设置相机**跟随对象距离**的差值速度,默认为`1.0`。 |
| > | > | ||
| > (设置新的`Distance`值后多久到达新距离)。 | > (设置新的`Distance`值后多久到达新距离)。 | ||
| 行 256: | 行 318: | ||
| ### Camera.FOV | ### Camera.FOV | ||
| - | > 设置相机FOV(默认`70.0`)。 | + | > 设置相机**FOV**(默认`70.0`)。 |
| > | > | ||
| ```javascript | ```javascript | ||
| Camera.FOV = 70.0; | Camera.FOV = 70.0; | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.FOVSpeed | ||
| + | |||
| + | > 设置相机**FOV变换速度**(默认`3.0`)。 | ||
| + | > | ||
| + | |||
| + | ```javascript | ||
| + | Camera.FOVSpeed = 3.0; | ||
| ``` | ``` | ||
| 行 267: | 行 340: | ||
| ### Camera.SmoothTime | ### Camera.SmoothTime | ||
| - | > 设置相机跟随对象的平滑(移动)间隔速度,默认`0.2`(数值越小,速度越快)。 | + | > 设置相机**部分模式**的平滑(移动)间隔速度,默认`0.2`(数值越小,速度越快)。 |
| + | > | ||
| + | > **注意:常规视角(第一人称\第三人称)跟随方式,**不会收到此数值的影响**,此数值适用于相机其他观察模式。** | ||
| ```javascript | ```javascript | ||
| 行 277: | 行 352: | ||
| ### Camera.Flip | ### Camera.Flip | ||
| - | > 设置相机临时反转模式,默认为`false`,此功能仅在**第一人称、第三人称**生效,并且可通过玩家【鼠标中键】**优先**开关。 | + | > 设置相机**临时反转模式**,默认为`false`,此功能仅在**第一人称、第三人称**生效,并且可通过玩家【鼠标中键】**优先**开关。 |
| ```javascript | ```javascript | ||
| 行 287: | 行 362: | ||
| ### Camera.Sway | ### Camera.Sway | ||
| - | > 设置相机漫游摇晃幅度,默认为`1.0`。 | + | > 设置相机**漫游摇晃幅度**,默认为`1.0`。 |
| + | > | ||
| + | > 注意:此属性在**第一人称**不生效。 | ||
| ```javascript | ```javascript | ||
| 行 297: | 行 374: | ||
| ### Camera.SwaySpeed | ### Camera.SwaySpeed | ||
| - | > 设置相机漫游摇晃速度,默认为`0.1`。 | + | > 设置相机**漫游摇晃速度**,默认为`1.0`。 |
| + | > | ||
| + | > 注意:此属性在**第一人称**不生效。 | ||
| ```javascript | ```javascript | ||
| - | Camera.SwaySpeed = 0.1; | + | Camera.SwaySpeed = 1.0; |
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.TiltShift | ||
| + | |||
| + | > 设置相机镜头**边缘虚化(移轴)**,范围`0.0~25.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | Camera.TiltShift = 0; | ||
| ``` | ``` | ||
| 行 307: | 行 396: | ||
| ### Camera.Vignette | ### Camera.Vignette | ||
| - | > 设置相机镜头边缘阴影(强度),默认范围`0.0~1.0`。 | + | > 设置相机镜头**边缘阴影强度**,范围`0.0~2.0`。 |
| ```javascript | ```javascript | ||
| 行 317: | 行 406: | ||
| ### Camera.VignetteColor | ### Camera.VignetteColor | ||
| - | > 设置相机镜头边缘阴影颜色,默认为黑色`Color(0, | + | > 设置相机镜头**边缘阴影颜色**,默认为黑色`Color(0, |
| ```javascript | ```javascript | ||
| Camera.VignetteColor = Color(0, 0, 0); | Camera.VignetteColor = Color(0, 0, 0); | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.Saturation | ||
| + | |||
| + | > 设置相机镜头**色彩饱和度**,范围`0.0~2.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | Camera.Saturation = 1.0; | ||
| ``` | ``` | ||
| 行 327: | 行 426: | ||
| ### Camera.LensLUT | ### Camera.LensLUT | ||
| - | > 设置**相机镜头色彩主题**,默认范围`0~10`,设置为`0`则表示默认主题。 | + | > 设置相机镜头**色彩滤镜**,设置为`0`表示原生滤镜,设置为`-1`表示地图默认滤镜。 |
| - | > | + | |
| - | > **注意:当脚本使用此属性修改色彩主题后,优先级将提升至最高,玩家通过游戏选项修改的主题将被忽略,直到下次加载新的世界场景。** | + | |
| ```javascript | ```javascript | ||
| Camera.LensLUT = 0; | Camera.LensLUT = 0; | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.DefaultLensLUT | ||
| + | |||
| + | > 获取地图默认相机镜头**色彩滤镜**(由地图作者设置的LUT)。 | ||
| + | |||
| + | ```javascript | ||
| + | Camera.DefaultLensLUT: | ||
| ``` | ``` | ||
| 行 511: | 行 618: | ||
| ```javascript | ```javascript | ||
| - | function Camera.Shake( strength: float = 1.0, time: float = 1.0 ) | + | function Camera.Shake( strength: float = 1.0, time: float = 1.0, addition: bool = false ) |
| ``` | ``` | ||
| 行 521: | 行 628: | ||
| ```javascript | ```javascript | ||
| - | function Camera.Punch( strength: float = 1.0, time: float = 1.0 ) | + | function Camera.Punch( strength: float = 1.0, time: float = 1.0, addition: bool = false ) |
| ``` | ``` | ||
| 行 531: | 行 638: | ||
| ```javascript | ```javascript | ||
| - | function Camera.Shock( strength: float = 1.0, time: float = 1.0 ) | + | function Camera.Shock( strength: float = 1.0, time: float = 1.0, addition: bool = false ) |
| ``` | ``` | ||
| 行 555: | 行 662: | ||
| function Camera.StopLookAt() | function Camera.StopLookAt() | ||
| ``` | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Camera.TestVisiblePoint() | ||
| + | |||
| + | > 测试某坐标是否在相机可视范围内。 | ||
| + | |||
| + | ```javascript | ||
| + | function Camera.TestVisiblePoint( pos: Vector ): bool | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||