V0.25.0.0 Release Note
注意事项
1.025上完善了UI控件-遮罩按钮的接口处理:024之前每个类型数据没有完全隔开,会导致调用圆形遮罩接口时(比如circlevalue),也会改变扇形遮罩的类似接口的效果(比如fanShapedValue),而025上修改了数据结构将其完全分割开了,因此,请大家注意使用某个类型的遮罩按钮效果时,需要修改对应类型的属性
// 025之前,属性没有隔离,对扇形遮罩设置circleValue相当于改变fanShapedValue
maskBtn.maskType = UI.MaskButtonType.MTFanShaped;
maskBtn.circleValue= 1;// 有效,但使用方法不正确
// 025之后,属性进行了隔离,对扇形遮罩设置circleValue不会生效
maskBtn.maskType = UI.MaskButtonType.MTFanShaped;
maskBtn.fanShapedValue = 1;// 有效
maskBtn.circleValue= 0;// 无效
// 025之前,属性没有隔离,对扇形遮罩设置circleValue相当于改变fanShapedValue
maskBtn.maskType = UI.MaskButtonType.MTFanShaped;
maskBtn.circleValue= 1;// 有效,但使用方法不正确
// 025之后,属性进行了隔离,对扇形遮罩设置circleValue不会生效
maskBtn.maskType = UI.MaskButtonType.MTFanShaped;
maskBtn.fanShapedValue = 1;// 有效
maskBtn.circleValue= 0;// 无效
2.寻路动态修饰区功能在v025标注废弃,将于v028下架。原功能的动态修改寻路导航能力可以直接通过普通模型替代,不再需要额外添加一个寻路动态修饰区逻辑对象,降低操作复杂度,免除了寻路动态修饰区带来的性能消耗。旧工程中如果有使用到该逻辑对象的,请及时进行替换。
3.编辑器提供论坛入口:菜单栏-帮助-论坛
4.编辑器提供产品手册跳转入口,提高产品手册于用户的可见程度
- 主编辑器对象管理器+主视口右键菜单支持跳转至产品手册
- UI编辑器对象管理器+视口右键菜单支持跳转至产品手册
新增功能
[新增]角色编辑器欧美卡通风格
角色编辑器新增欧美卡通角色风格,可以在角色编辑器-属性-形象-基础-角色设定中进行设置。
欧美卡通角色编辑项和使用方式与写实风格一致,不包含头部花纹。
头部花纹
仅存在于写实风格角色中的属性,可以在头部相关-化妆-头部贴花样式中设置。
- 如果希望其他角色也具有头部贴花的属性,可以到论坛发帖提需求,要求开放接口。
- 目前头部贴花是整个头部,只开放了贴图和颜色,如果项目中有用到,可以到论坛发帖提需求,要求开放更多接口。
[新增]摄像机新增属性——碰撞插值速度
- 该属性用于调整摄像机从碰撞状态恢复为非碰撞状态的速度,用于使摄像机碰撞效果更加平滑;
- 默认值为2,生效范围0-20,值越大速度越快,当等于0时,会关闭摄像机碰撞插值效果;该速度不是固定的,而是会由快变慢
属性名称 | 英文名称 | 类型 | 默认值 | 取值范围 | 说明 | 读写 |
---|---|---|---|---|---|---|
摄像机碰撞插值速度 | cameraCollisionInterpSpeed | number | 2 | 0-20 | 摄像机碰撞插值速度,该值用于调整摄像机从碰撞状态恢复为非碰撞状态的速度,用于使摄像机碰撞效果更加平滑; | Read / Write |
效果视频:
测试工程:
[新增]提供论坛入口
- 入口:菜单栏——帮助
[新增]对象管理器、主视口提供产品手册跳转入口
入口:对象管理器、主视口、UI编辑器设计器——右键——访问产品手册
效果:跳转至该对象类型的产品手册
- 范围:绝大部分对象,包括世界对象、功能对象、资源对象、UI对象
[新增]贴图资源预览新增尺寸信息
- 信息展示:资源预览窗口
- 目的:提供UI的尺寸大小,让开发者更加方便设计UI
[新增]属性值复制功能
- 入口:属性右键——复制属性值
- 效果:如复制position,为Vector(-351.149994,863.859985,0.000000);对于枚举类型的属性,如网络状态=双端时,复制为2,并非NetStatus.ServerAndClient(后续将优化)
- 目前能复制的属性为 Number String Vector Rotation Enum
- 上下文:
- 本身是与复制参数名功能一起上,但参数名的复制需要一定的研发周期与成本,后续会做;
- 复制属性值与当前复制/粘贴功能可以结合,为了减少开发者的理解成本,后续将优化为一个功能
[优化]工程内容搜索后支持定位目录位置
- 入口:工程内容搜索状态下,右键文件,不支持多选时使用
- 效果:跳转至该目录并选中文件,并取消搜索状态
[优化]UI编辑器属性面板优化
- 选中多个UI控件后,会在属性面板展示这些UI控件的共有属性,并且支持批量修改
- 优化了图片/按钮/文本按钮控件更换图片后,控件大小变化的逻辑
如果没有手动调整过UI控件的大小,每次更换图片后,UI控件大小会自动设置为UI贴图资源尺寸(也就是属性面板中图片-图片大小)
如果手动调整过UI控件的大小,每次更换图片后,UI控件大小会保持不变
- 优化了UI编辑器中撤销/撤销恢复操作的逻辑,现在对UI控件属性进行的每一步修改都可以撤销/撤销恢复了
[优化]新增去除角色mesh的物理信息,优化角色性能
- 我们提供了去除角色mesh的物理信息的接口,开启后,会影响布娃娃功能和复杂射线检测功能。但可以节省会节省游戏线程20-30%的角色耗时以及physicstask耗时。提高游戏性能和帧率。
- A57测试对比报告:在空场景情况下,同屏20个V2角色的性能对比
之前版本(022版本) | 静止状态:帧率:23-25FPS 内存:440M Game耗时:40-43ms Draws:360移动状态:帧率:17-21FPS 内存:440M Game耗时:44-50ms Draws:360 |
---|---|
目前版本(025版本) | 静止状态:帧率:25-29FPS 内存:460M Game耗时:26-27ms Draws:635移动状态:帧率:25-29FPS 内存:460M Game耗时:26-27ms Draws:635 |
API:
属性名称 | 英文名称 | 类型 | 默认值 | 说明 | 读写 |
---|---|---|---|---|---|
是否开启角色物理信息 | physicsEnabled | bool | false | 是否开启角色物理,默认关闭以节省性能.该属性对角色射线检测功能有影响,如果需要射线检测打到具体的骨骼部位,可将physicsEnabled设置true | Read / Write |
脚本示例:
TypeScript
//声明玩家角色
this.character = player.character;
//当用户按住了'1'按键时,进入布娃娃状态
this.character.onSkill1Triggered.add(() => {
//开启角色物理信息
this.character.physicsEnabled = true;
})
//声明玩家角色
this.character = player.character;
//当用户按住了'1'按键时,进入布娃娃状态
this.character.onSkill1Triggered.add(() => {
//开启角色物理信息
this.character.physicsEnabled = true;
})
TIP
1.角色物理信息开关对布娃娃状态做了兼容,开启关闭对布娃娃表现没有影响。
2.对角色先开启物理信息,再关闭物理信息后,在原本的位置仍然能够检测到物理信息。这是因为原本物理信息会跟着角色一直在动(这也是物理信息的消耗点所在),关闭物理信息后,物理信息就不会再跟随角色移动了。这个问题预计会在026修复。
[优化]摄像机震动接口
- 我们优化了之前摄像机的震动接口,使接口调用更加便利。
脚本示例:
TypeScript
player.character.cameraSystem.cameraShake.xAmplitude(5).xFrequency(50).start(1);
player.character.cameraSystem.cameraShake.yAmplitude(5).yFrequency(50).start(1);
player.Character.cameraSystem.cameraShake.zAmplitude(5).zFrequency(50).start(1);
player.character.cameraSystem.cameraShake.rollAmplitude(5).rollFrequency(50).start(1);
player.character.cameraSystem.cameraShake.pitchAmplitude(5).pitchFrequency(50).start(1);
player.character.cameraSystem.cameraShake.yawAmplitude(5).yawFrequency(50).start(1);
player.character.cameraSystem.cameraShake.xAmplitude(5).xFrequency(50).start(1);
player.character.cameraSystem.cameraShake.yAmplitude(5).yFrequency(50).start(1);
player.Character.cameraSystem.cameraShake.zAmplitude(5).zFrequency(50).start(1);
player.character.cameraSystem.cameraShake.rollAmplitude(5).rollFrequency(50).start(1);
player.character.cameraSystem.cameraShake.pitchAmplitude(5).pitchFrequency(50).start(1);
player.character.cameraSystem.cameraShake.yawAmplitude(5).yawFrequency(50).start(1);
效果视频:
TIP
- 振幅和频率要一起使用,单独使用不起效果
- 分为旋转震荡和位移震荡
- 可以在start的时候设置不清除震荡设置,下次可以再次使用这些参数
- 震荡的开始方向不确定
- character.cameraSystem 会在027被替换为Gameplay.getMainCamera();
[调整]修改角色坐标同步机制
- 目前角色完全由主控端作为权威端进行数据同步,其他端只做接收。同时其他端修改角色只影响本地,会被同步数据覆盖。
- 如果只有一个客户端有的物体,其他客户端看玩家会拉扯
- 如果其他客户端和玩家客户端拥有相同的单端物体,则表现正常(很多时候不需要双端了)
- 修复了以前站立在纯单端物体上,其他端看到会被传回零点的bug
- 目前在服务端修改location和rotation可以兼容。
[调整]去除动静态
025版本后属性面板删除对象动静态属性,编辑器动静态概念对用户透明。用户不再需要考虑对象的动静态状态,而是由底层自行判断。当前动静态处理规则如下:
- 编辑状态下,所有对象设置为动态(避免因静态原因导致脚本挂载或其他操作受阻)
- 物理模拟、挂载脚本、挂载运动器的
StaticMesh
及它们的子StaticMesh
对象会被判断为动态对象。 - 其余
StaticMesh
则作为静态对象以Instance形式存在。 - 其他对象例如逻辑对象都是动态对象。
- 支持通过find()、射线、触发器等手段去获取静态
StaticMesh
对象。 - 获取静态
StaticMesh
对象不改变动静态状态 - Get静态
StaticMesh
对象属性(除guid外)、主动Set静态StaticMesh
对象属性,被动Set静态StaticMesh
对象属性(例如作为子对象被修改了位置),调用静态StaticMesh
对象的函数(GameObject
或StaticMesh
),都会使它连带自身子StaticMesh
对象会自动变化为动态对象。 - 变化为动态对象后不可逆,不可再变为静态对象。
StaticMesh
对象动静态状态切换完全有底层判断,无需考虑(无法控制)。- 客户端对象切换动静态状态不影响服务器,服务器对象切换动静态状态会同步至客户端。
TIP
后续会支持Get静态StaticMesh
对象属性不修改动静态状态。
对Gameobject使用get方法同样会变为动态的,可能影响到的是射线检测时,获取GameObject的name/tag会将对象变为动态。后续版本会改为获取属性不会改变对象为动态。
[优化]新增寻路数据更新的自动开关
之前项目中无论是否使用寻路区域,在移动带碰撞的对象时都会产生寻路数据更新造成的部分性能消耗。本次对该问题进行优化,由底层判断项目中是否使用寻路区域来启用寻路数据更新能力。根据研发自测报告在500对象每帧移动中线程时间约可节约1ms。
[通知]新老交互物已合并
上下文:
0.22新增【新交互物】(交互结点InteractiveObject)
部分接口已删,不做参考意义
为避免老交互物废弃后用户需要大量修改项目中场景内的老交互物,024版本准备提供一种兼容方式:缝合新老交互物。缝合后类名统一使用老交互物的类名。新交互物将自身API及属性迁移至老交互物内,同时,老交互物的原有API和属性标废弃处理。最终用户项目中场景对象无需修改,只需要在老交互物删除前将游戏代码中使用的接口和属性换为新交互物的即可。同时024版本后建议统一使用新交互物的属性和接口。022 - 024版本中如果使用了新交互物,则需要在024修改。
之前由于代码重构关系交互物分新老两个版本,024已合并。新交互物接口合并入老交互物中后,新交互物删除。老交互物接口标注废弃但是功能保留。无需修改项目。
InteractiveObject删除
Interactor保留
interactiveObject的接口并入Interactor中
Interactor老接口废弃但功能保留
目前交互物新增功能:
- 支持单端使用
- 支持玩家角色和NPC
TIP
目前交互物切换姿态后还是会有位移延迟