[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
-
ILoader区分环境分别实现
Editor环境
Unity打包
Resources
StreamingAssets
下的资源(而且是只读的), 为了达到更新丶替换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