[Unity] ILoader该怎么写? ILoader.ReadFile返回的debugpath有什么用? 为什么无法断点(Unbound breakpoint)? #807
throw-out
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
ILoader区分环境分别实现
Editor环境
Unity打包
ResourcesStreamingAssets下的资源(而且是只读的), 为了达到更新丶替换js脚本的目的, 我们一般不会将脚本资源直接放在Resources/StreamingAssets下.网络Application.persistentDataPath本地压缩文件等途径获取它, 因此ILoader实例可以先读取这些文件来创建缓存(例如:Dictionary<string, string>), 之后Puerts.JsEnv实例再从缓存中读取实例
随着版本迭代puerts可能更改内置脚本格式/扩展名, 而DefaultLoader是随版本修改和内置脚本兼容的, 我们使用DefaultLoader加载内置js脚本就可以随意切换版本而无需额外修改代码
查看PackageLoader示例
debugpath应该怎么处理
debugpath参数需返回js源文件的绝对路径, 这样js engine才能理解模块的结构, 后续Debugger才能正常命中断点.
/../和/./), 可使用System.IO.Path.GetFullPath处理成绝对路径. Windows平台上需要使用字符串\替换/在ILoader中无需处理文件匹配/文件搜索, js engine本身会进行模块解析, 我们直接拼接字符串再检查文件状态即可.
(如果我们自行去处理文件匹配/文件搜索, 可能与js engine本身的模块解析逻辑冲突, 从而导致js脚本多次加载以及更严重的原型链错乱问题)
修改文件扩展名也可看成移动位置调试:
如仍未能正常调试, 可参考Puerts Inspector指南(一)在UE4和Unity里调试Javascript一文使用chrome内核浏览器连接调试查看
源代码 - 页面 - file://界面, 检查已加载的js脚本结构是否与工程项目一致debugger;语句, 当代码执行到此位置时调试器将强制进入断点模式示例:
dist/*和npm安装目录node_modules/*下的脚本:查看示例
示例工程结构


Beta Was this translation helpful? Give feedback.
All reactions