开发平台:Unity 2021.3.7f1c1
编程平台:Visual Studio 2022
编程语言:CSharp 6.0
三方工具:CameraPath3
工具简述
- 在 2019年官方停止版本维护,不再支持 URP 等新版本。而实际业务要求继续使用该开发工具。
问题背景
使用 CameraPath
中 Events 模块为其添加触发事件。已确认程序注册上并无多次注册行为。但添加的事件出现多次反复回调问题造成表现存在较大误差,回调多次的无意义程序执行情况。
问题探究
问题祸从犯:HideFlags.HideInInspector
CameraPath
中的 Event 模块实际上依赖于CameraPathEvent
脚本。- 添加以下代码,扩展菜单,补充增加解除
HideFlag
的行为。
[MenuItem("GameObject/HideFlag", false, 10)]
static void MyTestA()
{Transform[] trans = Selection.activeTransform.GetComponentsInChildren<Transform>(true);Array.ForEach(trans, t => { t.gameObject.hideFlags = HideFlags.None; });
}
- 对
CameraPath
对象解除隐藏后观察CameraPathEvent
。
是的,回调原因是因为 CameraPathEvent
中存在多个同名EventName
的情况。与 CameraPath
中显示的有效 Event 严重符合。回到问题本身。CameraPath 处理 Event 或其他模块上有BUG缺陷。
解决方法
方案一:新建 CameraPath + CameraPathAnimator 对象,并导入 XML 数据
虽然显示上存在问题,但通过 XML 数据存储的内容是准确无误,没有将未展示内容数据存至文件中。因此在不改变现有数据条件下,导出为 XML 文件,并重新加载进 新 CameraPath 可直接快速解决问题。
方案二:删除 Hidetag.None 下多余的 CameraEventPoint 组件
应对简单数据内容,可直接删除对应事件即可。但问题非局限于 Event 项,在其他模块中也同样存在相同问题