meta data for this page
📚 Client/Camera
在Camera
类操作中,开发者可修改玩家本地状态下的相机属性。
注意:控制非玩家自身角色外的其他对象或相机功能,均属于“观察模式”,在观察模式下无法操作玩家自身角色。
(例如:观察对象非玩家自身角色、其他相机观察模式等)
📒 Property
📘 Camera.Mode
设置本地玩家游戏视角模式(默认2.5D、第三人称)。
开发者可根据游戏需求,随时在代码中动态切换模式及配套的属性,需要注意的是,不同视角模式可能有不同的属性控制,此文档中的属性并非完全适用于全部模式(有些属性在特定模式下修改可能不会有效果)。
不同游戏视角会衍生不同的游戏效果,例如2.5D视角主要是平面射击,第三人称视角则是根据准星自由射击、交互等。
Camera.Mode = 0;
ID | 视角模式 | 主要改动 |
---|---|---|
0 | 默认视角,2.5D鸟瞰视角 示例:孤胆枪手、Moba类游戏、视角相对固定(可调) | FocusPos 基于世界地面(扩展属性: Camera.D2Mode ) |
1 | 第一人称视角 示例:未转变者、我的世界 | 此视角因效果比较特殊,所以许多属性修改并不会起作用 |
2 | 第三人称视角 示例:绝地求生、GTA系列、视角相对自由 | FocusPos 基于屏幕中心(准星) |
反之亦然,通常鸟瞰视角也应在【鼠标可见】情况下正常操作角色。
(相关API:GUI.SetCursorActive()
)
Camera
其他属性,已达到最终的视角预制效果(例如Distance\Sway\Offset
等属性),如果开发者有多个自定义视角的修改需求,建议将修改视角封装成多个方法(如下代码示例)。
//FPS function ChangeCameraMode0() { Camera.Mode = 1; Camera.Sway = 0; } //TPS function ChangeCameraMode1() { Camera.Mode = 2; Camera.Sway = 1.0; //恢复漫游抖动 Camera.Offset = Vector(0.2, 0.8, 0); }
📘 Camera.Pos
获取(只读)相机焦点(游戏的眼睛)世界空间位置。
游戏视角位置的控制应该使用Camera.Mode | LookAt | RoamPoint
等方法进行引擎自动跟随,而不需要手动每帧编写跟随。
Camera.Pos: Vector
📘 Camera.EulerAngle
获取(只读)相机焦点(游戏的眼睛)世界空间角度。
Camera.EulerAngle: Vector
📘 Camera.Target
设置一个相机跟随对象(仅限Character
对象),多数情况下应该优先使用此属性。
设置非玩家自身角色对象可用于观察(观战),此模式下会跟随目标对象的角度,因此VAngle | HAngle
修改可能不会生效。
设置为null
时则不跟随任何对象,转而尝试跟随Camera.TargetPos
坐标。
注意:控制非玩家自身角色==的其他对象,将切换至“观察模式”(Camera.IsObserver
true)。
let target = Character.Find(0); if(target != null) Camera.Target = target;
📘 Camera.TargetPos
设置一个相机目标位置坐标(Entity),如果TargetPos
被激活设置,Camera.Target
将会被自动置空(两个属性无法同时兼容)。
如果Camera.Target
存在对象(优先),即使TargetPos
属性不为空,也仍然只会跟随Camera.Target
而不是Camera.TargetPos
。
Camera.TargetPos = Vector(0, 0, 0);
📘 Camera.IsObserver
获取当前相机是否为观察模式。
注意:控制非玩家自身角色外的其他对象或相机功能,均属于“观察模式”
Camera.IsObserver: bool //Camera.Target isn't Owner Character
📘 Camera.Offset
设置相机跟随对象的本地坐标偏移,默认为Vector(0, 0, 0)
,可用于调整相机方向偏移。
Camera.Offset = Vector(0, 2, 0); //相机高度偏上2.0
📘 Camera.D2Mode
设置相机2D渲染方式开关,激活后相机将以正交视角渲染。
注意:此模式更适合搭配用于Camera.Mode = 0
鸟瞰2.5D视角。
当2D渲染开启后,部分有关Camera的属性将会发生变化,可能需要手动将Fov | Distance...
等属性调整为更适合2D渲染的数值。
Camera.D2Mode = false; //bool
//2DMode example Camera.Mode = 0; Camera.Offset = Vector(0, 1, 0); Camera.Distance = 3; //3 = 30(fixed) Camera.Sway = 0; Camera.SmoothTime = 0.3; Camera.DistanceSpeed = 2; Camera.AutoFix = false; //Disable Rotate Camera.ForwardMode = false; //Disable Rotate Camera.VAngle = 55; //2.5D Camera.FOV = 0.8; //2D Mode(Distance) Camera.D2Mode = true; //Wake GUI.SetCursorActive(true);
📘 Camera.SlowMode
设置相机慢动作模式(半速插值)开关(不支持第一人称视角),激活后相机将以慢速延迟移动视角。
注意:此模式更适合搭配FreeMode
自由视角模式,在漫游模式下鼠标将会差值慢速移动,适合拍摄视频、漫游浏览。
Camera.SlowMode = false; //bool
📘 Camera.FreeMode
设置相机自由漫游模式开关,激活后相机将允许玩家自由移动视角(移动、旋转速度同步受到Camera
属性影响)。
注意:此模式优先级最高,启用后将暂时屏蔽其他相机模式,同时开启模式并不会屏蔽控制角色移动(如果存在操纵角色\载具,仍然可进行移动等行为,如果不希望这样,可以自行编写相关冻结逻辑(Frozen),以达到漫游模式时停止控制)。
此模式下移动、旋转速度受到SmoothTime
、RotateSpeed
影响。
Camera.FreeMode = false; //bool
📘 Camera.ForwardMode
设置相机向前跟随模式开关,激活后相机将始终向Target
正前角度靠近。
注意:此选项需要Camera.Target
存在目标才有意义。此功能只在RoamPoint
或BirdView
模式下生效。
(如果希望在第一人称\第三人称使用类似功能,你可能找的是Camera.AutoFix
)
Camera.ForwardMode = false; //bool
📘 Camera.AutoDistance
设置相机自动遮挡距离开关,激活后相机在遮挡时保持可见距离(但不会调整实际Distance
变量)。
Camera.AutoDistance = true; //bool
📘 Camera.AutoFix
设置相机自动修正功能开关,此功能可以修正有关相机的便捷化效果。
例如:玩家操作空闲超过X秒后,相机自动旋转至角色或载具的正前方。
Camera.AutoFix = true; //bool
📘 Camera.RotateSpeed
设置相机旋转角度的插值速度(非鼠标灵敏度),默认为2.0
。
此类属性仅对鸟瞰视角、激活受支持的SlowMode
视角、相机观察行为等生效。
Camera.RotateSpeed = 2;
📘 Camera.VAngle
设置相机跟随的上下角度,默认为0.0
(举例:设置45.0
则为向下45度看,反之-45.0
表示向上看)。
注意:此方法更偏向于修改Camera
自身的角度,如果玩家正在控制自身角色,实际上可能修改的是player.FocusVAngle
(映射)。
Camera.VAngle = 0.0;
📘 Camera.HAngle
设置相机跟随的横向角度,默认为0.0
。
注意:此方法更偏向于修改Camera
自身的角度,如果玩家正在控制自身角色,实际上可能修改的是player.FocusHAngle
(映射)。
Camera.HAngle = 0.0;
📘 Camera.Distance
设置相机跟随对象的距离,默认为10.0
。
注意:在开启AutoDistance
属性后,因为其自动距离机制,可能不会完全按照Distance
所设定的距离执行。
Camera.Distance = 10.0;
📘 Camera.DistanceSpeed
设置相机跟随对象距离的差值速度,默认为1.0
。
(设置新的Distance
值后多久到达新距离)。
Camera.DistanceSpeed = 1;
📘 Camera.FOV
设置相机FOV(默认70.0
)。
Camera.FOV = 70.0;
📘 Camera.FOVSpeed
设置相机FOV变换速度(默认3.0
)。
Camera.FOVSpeed = 3.0;
📘 Camera.SmoothTime
设置相机跟随对象的平滑(移动)间隔速度,默认0.2
(数值越小,速度越快)。
注意:在观察非本地对象时,由于网络的同步不稳定性,可能会导致视角抖动,此情况应该通过设置0
数值来解决。
Camera.SmoothTime = 0.2;
📘 Camera.Flip
设置相机临时反转模式,默认为false
,此功能仅在第一人称、第三人称生效,并且可通过玩家【鼠标中键】优先开关。
Camera.Flip = false;
📘 Camera.Sway
设置相机漫游摇晃幅度,默认为1.0
。
Camera.Sway = 1.0;
📘 Camera.SwaySpeed
设置相机漫游摇晃速度,默认为0.1
。
Camera.SwaySpeed = 0.1;
📘 Camera.Vignette
设置相机镜头边缘阴影(强度),范围0.0~2.0
。
Camera.Vignette = 0.4;
📘 Camera.VignetteColor
设置相机镜头边缘阴影颜色,默认为黑色Color(0, 0, 0)
。
Camera.VignetteColor = Color(0, 0, 0);
📘 Camera.LensLUT
设置相机镜头色彩滤镜,设置为0
表示原生滤镜,设置为-1
表示地图默认滤镜。
Camera.LensLUT = 0;
📘 Camera.DefaultLensLUT
获取地图默认相机镜头色彩滤镜(由地图作者设置的LUT)。
Camera.DefaultLensLUT: int
📘 Camera.IsInWater
获取相机是否在水中(水底状态)。
Camera.IsInWater: bool
📘 Camera.LookAtMode
获取相机是否正在LookAt
焦点模式(使用StartLookAt()
激活)。
Camera.LookAtMode: bool
📒 Static Function
📘 Camera.Focus()
立即将相机定位到追踪目标位置,适用于希望立即到相机目标位置(不需要平移效果)时调用。
function Camera.Focus()
📘 Camera.AddRoamPoint()
增加一个相机漫游点(相机优先级更高,但相比FreeMode
低)。
如果相机漫游点数量>0,相机将进入漫游模式,将按照漫游点坐标池循环移动相机(循环自动前往下一个点),通常至少添加2个点以上来使用。
注意:相机漫游运动仍然使用Target
焦点跟随的方式,因此漫游坐标并非实际相机本地位置,而是相机看向的【焦点位置】,Distance
等属性仍然是有效的。
function Camera.AddRoamPoint( point: Vector )
📘 Camera.RemoveRoamPoint()
移除指定索引的相机漫游点(如果相机漫游点数量<=0,漫游模式将自动关闭)。
function Camera.RemoveRoamPoint( index: int )
📘 Camera.GetRoamPoint()
根据指定索引获取相机的漫游点坐标。
function Camera.GetRoamPoint( index: int ): Vector
📘 Camera.GetCurrentRoamIndex()
获取相机当前漫游点目标索引。
function Camera.GetCurrentRoamIndex(): int
📘 Camera.GetRoamPointCount()
获取当前相机漫游点的数量(如果相机漫游点数量<=0,表示漫游模式关闭)。
function Camera.GetRoamPointCount(): int
📘 Camera.ClearAllRoamPoint()
清空当前相机全部漫游点(自动关闭漫游模式)。
function Camera.ClearAllRoamPoint()
📘 Camera.SetImageEffectActive()
设置指定屏幕后处理效果开关,详情参考《相机后处理效果》。
function Camera.SetImageEffectActive( id: int, active: bool )
📘 Camera.GetImageEffectActive()
获取指定屏幕后处理效果开关,详情参考《相机后处理效果》。
function Camera.GetImageEffectActive( id: int ): bool
📘 Camera.SetImageEffectProperty()
设置指定屏幕后处理效果属性配置(强度、偏移等),详情参考《相机后处理效果》。
function Camera.SetImageEffectProperty( id: int, option: int, value: any )
//设置模糊等级为3(比较模糊)的Blur屏幕高斯模糊效果。 Camera.SetImageEffectActive(0, true); Camera.SetImageEffectProperty(0, 0, 3); //option0(表示设置的是【强度Intensity】),value3(表示设置值为3,越高越模糊)
Option | 类型 | 说明 |
---|---|---|
0(强度|范围|偏移) | float | Intensity 根据实际后处理效果的不同,拥有不同的意义 |
1(X偏移|参数1) | float | OffsetX 根据实际后处理效果的不同,拥有不同的意义 |
2(Y偏移|参数2) | float | OffsetY 根据实际后处理效果的不同,拥有不同的意义 |
📘 Camera.GetImageEffectProperty()
获取指定屏幕后处理效果属性配置(强度、偏移等),详情参考《相机后处理效果》。
function Camera.GetImageEffectProperty( id: int, option: int ): any | float
📘 Camera.SetCinematicBorder()
设置屏幕电影模式边框开关,在场景切换时不会重置。
function Camera.SetCinematicBorder( active: bool, time: float = 1.0 )
📘 Camera.GetCinematicBorder()
获取屏幕电影模式边框开关。
function Camera.GetCinematicBorder(): bool
📘 Camera.Shake()
激活一次相机Shake抖动效果。
function Camera.Shake( strength: float = 1.0, time: float = 1.0 )
📘 Camera.Punch()
激活一次相机Punch力量抖动效果。
function Camera.Punch( strength: float = 1.0, time: float = 1.0 )
📘 Camera.Shock()
激活一次相机Shock冲击抖动效果。
function Camera.Shock( strength: float = 1.0, time: float = 1.0 )
📘 Camera.StartLookAt()
激活相机LookAt
观察焦点模式,可用于让相机从A点看向B点。
注意:此方法改变的是相机本身,而不是传统的跟随焦点。
function Camera.StartLookAt( start: Vector, end: Vector, time: float = 1.0 )
📘 Camera.StopLookAt()
取消相机LookAt
观察焦点模式。
function Camera.StopLookAt()
📘 Camera.TestVisiblePoint()
测试某坐标是否在相机可视范围内。
function Camera.TestVisiblePoint( pos: Vector ): bool