V0.23.0.0 Release Note
注意事项
- 由于「getPlayerID」接口弃用,但「Gameplay.getPlayer」无法传入「getUserId」,该问题会在024修复,修复期间可使用原方案过度。
新增功能
[新增]运动器重置接口moverReset()
TypeScript
/**
运动器重置接口moverReset()可以将正在运行的运动器重置回初始状态,并可以通过执行回调重新设置运动器参数
*/
let moverOG = this.gameObject as Gameplay.IntegratedMover; // 指向场景中的运动器
moverOG1.enable = true; //启用运动器
setTimeout(() => {
//5秒后将运动器重置,并关闭运动器
moverOG.moverReset(()=>{
moverOG.enable = false;
});
}, 5000);
/**
运动器重置接口moverReset()可以将正在运行的运动器重置回初始状态,并可以通过执行回调重新设置运动器参数
*/
let moverOG = this.gameObject as Gameplay.IntegratedMover; // 指向场景中的运动器
moverOG1.enable = true; //启用运动器
setTimeout(() => {
//5秒后将运动器重置,并关闭运动器
moverOG.moverReset(()=>{
moverOG.enable = false;
});
}, 5000);
[UI编辑器]文本/输入框组件新增属性-富文本
- 示例:
- 用法请详见产品手册富文本
[新增]工程增加版本信息
- 当开发者进行editor升级后,如原项目打开新版editor出现问题,此时会有弹窗带有打开Release Notes的链接,帮助用户快速进入Release Notes找到对应解决方案
[优化]游戏状态刷新机制优化
- 解决用户频繁发版游戏时状态不能马上更新的问题
- 缩短状态刷新时间,由5分钟修改为30s一次
- 窗口由模态修改为非模态,否则将阻塞主线程导致界面开启时无法刷新
- 界面新增刷新按钮,点击刷新按钮后执行刷新操作
[新增]共享存储数据
用法请详见产品手册:共享数据
[优化]角色数据导入时清空对应部位的数据
优化前,在角色编辑器导入角色文件时,不会清除当前角色上的已有数据。
举例说明:角色身高为2,导入一个角色文件,该文件中仅记录了头部大小,所以在导入该文件时,仅会修改当前角色的头部大小,不会还原身高,导致该角色的身高仍然是2,没有恢复初始值。
衍生问题:该逻辑会导致在导入不同的完整角色时出现数据堆叠的情况,如导入文件1再导入文件2,会导致导入文件2时,角色上还保留文件1的数据。
优化后,在角色编辑器导入角色文件时,会根据角色文件保存时的部位分类,在导入时分别恢复初始值后再导入文件中的数据。
[新增]编辑器新增PING和FPS区域显隐开关,单机模式展示FPS。
- 编辑器
单机模式下,在编辑器主视口展示FPS占位区域,并在显示隐藏设置中新增主视口占位区域的显隐开关。
- 客户端
单机游戏,在屏幕右上方动态展示FPS。
[优化]RPC参数类型优化
详情参考Replicated使用规范
[新增]Player新增API
TypeScript
/**
* @description 获取用户的平台Id,该Id可以作为玩家唯一Id使用。
* @effect 调用端生效
* @returns 用户平台Id
*/
getUserId(): string;
/**
* @description 获取用户的平台Id,该Id可以作为玩家唯一Id使用。
* @effect 调用端生效
* @returns 用户平台Id
*/
getUserId(): string;
[废弃]Player废弃以下接口
TypeScript
/**
* @description 获取当前游戏内的玩家Id,用于和其它玩家区分。不能用于查询用户信息。
* @deprecated since:023 reason:功能废弃 replacement:getUserId
* @effect 调用端生效
* @returns 当前游戏内的玩家Id
*/
getPlayerID(): number;
/**
* @description 获取用户系统的玩家Id
* @deprecated since:023 reason:命名不规范 replacement:AccountService.getInstance().getOpenId()
* @effect 调用端生效
* @returns 用户系统的玩家Id,可以用于查询用户信息。
*/
getUserSystemId(): string;
/**
* @description 获取玩家账户
* @effect 只在客户端调用生效
* @deprecated since:023 reason:功能废弃 replacement:getUserId
* @returns 玩家账户
*/
getAccount(): string;
/**
* @description 获取当前游戏内的玩家Id,用于和其它玩家区分。不能用于查询用户信息。
* @deprecated since:023 reason:功能废弃 replacement:getUserId
* @effect 调用端生效
* @returns 当前游戏内的玩家Id
*/
getPlayerID(): number;
/**
* @description 获取用户系统的玩家Id
* @deprecated since:023 reason:命名不规范 replacement:AccountService.getInstance().getOpenId()
* @effect 调用端生效
* @returns 用户系统的玩家Id,可以用于查询用户信息。
*/
getUserSystemId(): string;
/**
* @description 获取玩家账户
* @effect 只在客户端调用生效
* @deprecated since:023 reason:功能废弃 replacement:getUserId
* @returns 玩家账户
*/
getAccount(): string;
[新增]检测类API屏蔽特定对象
当前检测类API无法针对对象进行检测屏蔽,导致实际开发过程中需要遍历检测结果进行判定导致性能表现差,开发不便等后果。因此决定在该类API中添加屏蔽对象参数使开发者可以按需获取检测结果。
函数名:Gameplay.lineTrace
功能:射线检测添加参数:
- 屏蔽对象数组
- 屏蔽模式
功能详细说明:
/**
* @param StartLocation usage:起始位置
* @param EndLocation usage:结束位置
* @param multiTrace usage:是否穿透检测 default:true
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns HitResult数组
* @effect 调用端生效
*/
function lineTrace(
StartLocation: Type.Vector,
EndLocation: Type.Vector,
multiTrace: boolean = true,
debug: boolean = true,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind: boolean = false,
Source: Core.GameObject = null
): Array<HitResult>;
/**
* @param StartLocation usage:起始位置
* @param EndLocation usage:结束位置
* @param multiTrace usage:是否穿透检测 default:true
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns HitResult数组
* @effect 调用端生效
*/
function lineTrace(
StartLocation: Type.Vector,
EndLocation: Type.Vector,
multiTrace: boolean = true,
debug: boolean = true,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind: boolean = false,
Source: Core.GameObject = null
): Array<HitResult>;
函数名:Gameplay.parabolicTrace该接口本身有问题,参数暴露不足导致应用场景受限,新版本次暂未上线。
功能:抛物线检测添加参数:
- 屏蔽对象数组
功能详细说明:
/**
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Direction usage:投掷方向
* @param InitSpeed usage:初始速度
* @param Range usage:距离
* @param CapsuleRadius usage:胶囊半径
* @param IgnoreObjectTypes usage:忽略Object类型
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns HitResult
*/
function parabolicTrace(
StartLocation: Type.Vector,
Direction: Type.Vector,
InitSpeed: number,
Range: number,
CapsuleRadius: number,
IgnoreObjectTypes: Array<ObjectTypeQuery>,
debug = true,
IgnoreObjectsGuid: Array<string> = [],
Source: Core.GameObject = null
): HitResult
/**
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Direction usage:投掷方向
* @param InitSpeed usage:初始速度
* @param Range usage:距离
* @param CapsuleRadius usage:胶囊半径
* @param IgnoreObjectTypes usage:忽略Object类型
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns HitResult
*/
function parabolicTrace(
StartLocation: Type.Vector,
Direction: Type.Vector,
InitSpeed: number,
Range: number,
CapsuleRadius: number,
IgnoreObjectTypes: Array<ObjectTypeQuery>,
debug = true,
IgnoreObjectsGuid: Array<string> = [],
Source: Core.GameObject = null
): HitResult
函数名:Gameplay.cylinderOverlap
功能:圆柱检测添加参数:
- 屏蔽对象数组
- 屏蔽模式
功能详细说明:
/**
* @author baoqiang.han
* @description 圆柱范围检测
* @groups GAMEPLAY
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Radius usage:检测半径
* @param Height usage:检测高度
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @r
function cylinderOverlap(
StartLocation: Type.Vector,
Radius: number,
Height: number,
debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>
/**
* @author baoqiang.han
* @description 圆柱范围检测
* @groups GAMEPLAY
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Radius usage:检测半径
* @param Height usage:检测高度
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @r
function cylinderOverlap(
StartLocation: Type.Vector,
Radius: number,
Height: number,
debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>
函数名:Gameplay.sphereOverlap
功能:球形检测添加参数:
- 屏蔽对象数组
- 屏蔽模式
功能详细说明:
/**
* @author baoqiang.han
* @groups GAMEPLAY
* @description 球形范围检测
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Radius usage:检测半径
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns GameObject数组
*/
function sphereOverlap(
StartLocation: Type.Vector,
Radius: number, debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>
/**
* @author baoqiang.han
* @groups GAMEPLAY
* @description 球形范围检测
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param Radius usage:检测半径
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns GameObject数组
*/
function sphereOverlap(
StartLocation: Type.Vector,
Radius: number, debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>
函数名:Gameplay.boxOverlapInLevel
功能:矩形检测添加参数:
- 屏蔽对象数组
- 屏蔽模式
功能详细说明:
/**
* @author baoqiang.han
* @groups GAMEPLAY
* @description 矩形范围检测
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param EndLocation usage:结束位置
* @param Width usage:检测宽度
* @param Height usage:检测高度
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns GameObject数组
*/
function boxOverlap(
StartLocation: Type.Vector,
EndLocation: Type.Vector,
Width: number,
Height: number,
debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>
/**
* @author baoqiang.han
* @groups GAMEPLAY
* @description 矩形范围检测
* @effect 调用端生效
* @param StartLocation usage:起始位置
* @param EndLocation usage:结束位置
* @param Width usage:检测宽度
* @param Height usage:检测高度
* @param debug usage:是否可视化绘制 default:true
* @param IgnoreObjectsGuid usage:屏蔽对象guid数组 default:[]
* @param IgnoreByKind usage:是否根据屏蔽对象guid数组中的屏蔽对象类别进行屏蔽,例如屏蔽对象guid数组中存在一个触发器A,那么如果本参数为false,只屏蔽触发器A,如果本参数为true,会屏蔽场景中所有触发器 default:false
* @param Source usage:检测源是发起本次检测的对象,不参与本次检测(例如发起客户端的角色对象) default:null
* @returns GameObject数组
*/
function boxOverlap(
StartLocation: Type.Vector,
EndLocation: Type.Vector,
Width: number,
Height: number,
debug: boolean,
IgnoreObjectsGuid: Array<string> = [],
IgnoreByKind = false,
Source: Core.GameObject = null
): Array<Core.GameObject>