Montage

  1. 处于BlendOut的Montage 不认为正在Playing。如果Montage里配置了BlendOut时间,那么该Montage在播放到剩余BlendOut时间时,Stop自己。Pasted image 20240927210710.png,该Montageinstance会从AnimInstance 中的ActiveMontagesMap中清除。Pasted image 20240927210938.png如果有地方判断Montage_IsPlaying,会返回false。

IK

  1. 记一种新避免关闭手部IK的方式:如果某个武器是Attach到右手(比如weapon_r骨骼),只需左手(hand_l)IK住的话。拿换弹动画举例,因为不关IK,所以需要实时更新IK位置。将动画里hand_l 相对weapon_r 的位置,每帧记录下来,然后播放换弹动画时,每帧将IK位置设置成记录好的位置。TwoBoneIK时,Effector 位置选择在weapon_r 的BoneSpace里。Montage的MetaData里可以用来离线保存时记录这些帧数据。Pasted image 20240927213752.png
  2. 上面方法缺点也很明显:1.需要手动保存帧数据;2.需要写代码每帧设置IK位置;3.代码里需要判断Montage是否在播放,会因为BlendOut的设置导致提前结束更新。所以最好的方式还是使用虚拟骨骼。

新加Component

  1. UE 在C++代码里加Component,请使用AddComponent[ByClass] 接口。或者通过NewObject,但是要记得Register。坑:子弹显影时,通过NewObject创建了ISMC。由于没有Register,导致RenderData没有创建,始终不显示。

ForEachObjectOfClass

  1. ForEachObjectOfClass 内部实现了hashMap,可以通过Outer,Class,Package寻找Object。Pasted image 20250423112951.png

禁止变量同步

DISABLE_REPLICATED_PROPERTY
DISABLE_REPLICATED_PRIVATE_PROPERTY
用在GetLifetimeReplicatedProps 中,标记某些属性不用同步,比如HiddenFlag。