Skip to content
034版本角色变动汇总

034版本角色变动汇总

1. 角色scale属性客户端修改不同步

前因后果

改动背景

  1. scale之前默认做了客户端调用同步,针对NPC上容易调用后出现广播成倍增长问题
  2. 减少底层功能对RPC使用,将RPC的权利交还给大家

改动可能导致的问题

客户端修改玩家/ npc 体型大小不同步,会导致不同端上,玩家体型不一致

修改方案

033034
// 客户端 character.worldTransform.scale = 10;// 客户端 this.net_scale(); @RemoteFunction(Server) net_scale(character: Character){ character.worldTransform.scale = 10; }

2. setVisibility头顶ui不隐藏

前因后果

改动背景

  1. 034之前,当修改角色可见性的时候,setVisibility()中,第二个参数propagateToChildren对角色的头顶UI对象(挂载在角色下)不生效。
  2. 034版本针对这个问题进行了修复:propagateToChildren对角色所有子对象生效

改动可能导致的问题

propagateToChildren默认值为true。当参数生效后,头顶UI对象会受该参数的取值影响。之前的项目如果指定propagateToChildren = false,在033上,角色会连带头顶UI进行隐藏,而034头顶UI则会显示。

修改方案

033034
// 头顶UI不可见 character.setVisibility(false, false);// 头顶UI不可见 character.setVisibility(false, true);

3. 头顶ui位置错误问题

前因后果

改动背景

  1. 034之前角色头顶UI反馈BUG,每次生成挂载位置由于网络和加载偶先偏移。
  2. 034修复了这个bug:角色头顶UI位置始终固定在距离角色头顶的某一个位置

改动可能导致的问题

原先如果有自己调整头顶UI的方案反而可能在034造成头顶UI一个异常的挂载效果。

修改方案

033034
// 重新挂了一次保证位置 character.attachToSLot(widget, HumanoidSlotType.Rings)// 034直接不重新挂即可

4. 角色预制体下模型碰撞生效导致中断跳跃

前因后果

改动背景

  1. 原先反馈角色预制体内,模型的碰撞对角色没生效。
  2. 034修复了这个问题:角色预制体内的模型,如果开启碰撞会对角色生效

改动可能导致的问题

角色预制体挂上了开碰撞的对象,在034影响了角色移动组件工作,跳不高,跑不动

修改方案

033034
// 正常创建预制体 // 034下关闭预制体下模型的碰撞 prefab.getChildren().forEach((v) => { if(v instance of Model) { (v as Model).setCollision(CollisionStatus.Off, true); } })

5. 动画状态切换改为属性同步导致一帧之内多次切换客户端无法知晓

前因后果

改动背景

  1. 034之前,动画切换状态是通过RPC,反馈RPC太多,且偶尔断线导致丢失不好做重连处理。
  2. 034改为属性同步,保证最终同步的状态是对的

改动可能导致的问题

034之前,如果利用RPC机制,在一帧内调用play和pause来实现暂停在第一帧需求,现在由于属性同步只会同步最后一帧的动画状态,因此同样的调用方法,动画不会播放。

修改方案

033034
// 一帧内播放 animation.play() animation.pause()// 034延迟一帧 if(SystemUtil.getEditorVersion != "034") { animation.play(); } else { setTimeout(() => { animation.pause(); }, 0); }

6. 双端npc去掉findfloor逻辑导致角色位置与033不同

前因后果

改动背景

  1. 原先NPC角色对象每时每刻都在findFloor带来额外性能消耗。
  2. 角色对象如果findFloor,那编辑态下设置位置和运行时真实位置会有偏差,比如本身角色就是陷入土里,但是运行起来又站在地面上。所以034去除了npc对象findFloor的逻辑。

改动可能导致的问题

之前有项目依赖findFloor逻辑,来间接解决资源异步带来的角色和模型碰撞加载的时序问题,034去除这个逻辑后,角色由于受到模型资源加载时序的影响没有检测到地板,创建在空中的角色会下落

修改方案

033034
// 创建角色后设置坐标 let chara = await GameObject.asyncSpawn("Id") as Character; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000);// 034需要把移动组件关闭 if(SystemUtil.getEditorVersion != "034") { let chara = await GameObject.asyncSpawn("Id") as Character; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000); } else { let chara = await GameObject.asyncSpawn("Id") as Character; chara .complexMovementEnabled = false; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000); }

7. 移动组件执行提前,执行时序调整导致角色移动组件提前工作

前因后果

改动背景

  1. 在034修改了角色初始化流程方案
  2. 角色034在骨骼和主Mesh加载完成后,即可开始移动,移动组件工作更早

改动可能导致的问题

之前项目可能将初始化的角色置于空中,由于初始化提速,onStart执行更慢,角色会下落一段距离在空中定住

修改方案

033034
// 创建角色后设置坐标 let chara = await GameObject.asyncSpawn("Id") as Character; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000);// 034需要把移动组件关闭 if(SystemUtil.getEditorVersion != "034") { let chara = await GameObject.asyncSpawn("Id") as Character; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000); } else { let chara = await GameObject.asyncSpawn("Id") as Character; chara .complexMovementEnabled = false; await chara = asyncReady(); chara.worldTransform.position = new Vector(100, 100, 1000); }

8. 角色换装阶段调用attachToSlot并操作位置,相对坐标异常

前因后果

  1. 之前角色在换装过程中,挂载对象后设置坐标有问题
  2. 034对操作逻辑进行梳理,确定了异步逻辑执行的可靠性,但同步执行时序仍然不保证

改动可能导致的问题

在之前的版本中,角色换装的同时执行同步挂载操作,和相对Transform的设置,本身效果不稳定。但如果通过自己的调整配置了一个大致的位置值,在034上可能由于代码的梳理,各项异步逻辑可能组合起来执行有变动。导致033 034挂载位置出现很小的偏移。