故障排除
Unity 问题
问: 我的Harmony资产未在 Unity Editor 内显示。
答: 此情况可能有多种原因。 请检查以下几项:
- HarmonyRenderer 插件是否已复制到 Assets/Plugins(资产/插件)目录? 该插件命名
HarmonyRenderer.bundle
基于macOS和HarmonyRenderer.dll
Windows。- 剪辑名称是否有效?确认剪辑名称出现在 stage.xml 文件中。
- 二进制文件是最新的吗? 如果更新Toon Boom游戏引擎 SDK 版本,请务必重新生成二进制文件(如使用)使之与 SDK 兼容。
问: 我的Harmony资产从 Unity 导出时未在 iOS 或 Android 显示。
答: 此情况可能有多种原因。 请检查以下几项:
- 确认已在
StreamingAssets
目录复制 Harmony 资产。 由于 HarmonyRenderer 插件无法使用 Unity 的资产数据库,因此Harmony资产会打包为纯文本文件,以便插件访问。- iOS 的插件是否与编辑器的版本相同? iOS 的插件位于
Assets/Plugins/iOS
目录。- 剪辑名称拼写是否正确? Windows 和 macOS 文件系统一般不区分大小写,但 iOS 和 Android 要区分。 所以,由于找不到资产,编辑器上可见的资产不显示在移动平台上。
- 确保 Sprite Sheet 的大小不超过所使用的设备的硬件限制。 否则,纹理可能完全不显示。
- 项目文件夹的路径是绝对路径吗? 如果是,可能不适用于移动设备,因为平台不存在此路径。
StreamingAssets
目录一定要使用相对路径。
问: 我的Harmony资产无法与 Unity 内的其他 2D 精灵正确合成。 即便更改 GameObjects 的顺序索引,2D 精灵也始终显示在 Harmony 资产之后。
答: Unity 的 2D 精灵和Harmony资产目前无法合成。 不过,此问题有几种解决方案:
使用 2D 纹理而非 2D 精灵。 将 2D 纹理添加到 Unity 的几何形状时,会像场景中其他 3D 元素一样合成,然后可以递增或递减变换的 Z 值更改合成顺序。
使用多个摄像机分部分渲染场景。 方法如下:
Harmony Camera
- 新建一个摄像机。
- 将 Harmony GameObjects 设置到特定图层(游戏对象检测器右上角)。
- 在摄像机中,将剔除遮罩设置到此图层(以及要在背景中渲染的其他图层)。
- 将 HarmonyCamera 组建添加到此摄像机,使 Harmony GameObjects 正确渲染。
精灵摄像机
- 新建一个摄像机。
- 将 2D 精灵对象设置到一个特定图层。
- 在摄像机中,将剔除遮罩设置到此图层(以及要在 2D 精灵前渲染的其他图层)。
- 将清除标志设置为 Depth Only(仅深度) 或 Don't Clear(请勿清除)。
- 深度设置为高于 Harmony 摄像机。
- 之后移动摄像机时,如果想让 Game Ojects 保持同步,须同时移动两个摄像机。
问: 如何规定动画的帧率? 我的动画播放的帧率与 Harmony 和 Unity Editor 的 Game Previewer 不同。
答: Game Previewer 默认以 24 帧/秒预览动画。 游戏中,通过 HarmonyAnimation 组件,可按您需要的速度调度动画。
示例
HarmonyAnimation animation = GetComponent<HarmonyAnimation>();
if (animation != null)
{
animation.PlayAnimation( frameRate, clipName );
}
问: 我在 Unity 的 Scene view 看不到角色。 有什么方法可以预览 Harmony 资产吗?
答: 由于Harmony资产的渲染在插件内进行,GameObject 内不更新任何 Renderer 组件,因此无法显示在 Scene view 内。
但是,您仍然可在 Game view 中预览资产(即便不播放)。 为便于查找和定位资产,我们添加了在编辑器和 Game view 游戏视图中渲染的边界框形状。
问: Unity 内如何处理Harmony资产的内存管理?
答: 大多数内存扩展算法在 C++ 插件中执行。 只要 GameObject 还在引用,数据结构就保持活动状态。 因此可以实例化任意数量的角色克隆,无需重新加载数据。 销毁时,GameObject 将对插件发出清除调用并删除关联的渲染对象。 Sprite Sheet 和动画数据只要有一个 GameObject 还在使用,将保持活动状态,销毁时发出清除调用。
问: Harmony资产内存未显示在 Unity 分析器中。 可以分析资产内存吗?
答: Unity 分析器不会在追踪中选取Harmony资产。 由于 Harmony GameObject 在资产管理和渲染中引用 C++ 插件,其内存无法在分析器中记录。 分析器(如 XCode 或 Visual Studio 提供的分析器)应允许您跟踪应用程序的内存,包括Harmony资产,还要提供更准确的结果。
一般问题
问: 如何规定 Sprite Sheet 中用于绘图的分辨率?
答: Harmony内的绘图分辨率不是固定的。 导出到 Sprite Sheet 的场景有多种分辨率,每个绘图最终的分辨率也将各异。 您可以使用“绘图”视图查看绘图的分辨率并与场景其余部分相对比。 启用“绘图”视图的透光台后,将看到所有未变换的场景绘图,比例与其在 Sprite Sheet 中所显示的相同。 具体来说,绘图在 Sprite Sheet 中使用的分辨率,是其在“摄像机”视图中未变换时显示的大小缩放到 Sprite Sheet 分辨率(“导出 Sprite Sheet”对话框中的“精灵分辨率”)。
知道这一点后,您可以轻松调整单个绘图的大小。 使用 Select(选择)工具缩小绘图,再使用 Transform(变换)工具放大,使其在“摄像机”视图没有视觉变化。 此操作可更改 Sprite Sheet 中绘图的大小。
问: 资产需要一些时间才能加载到移动设备。 有什么方法可以加快此进程吗?
答: Harmony导出可兼容多个游戏引擎的互换 XML 格式。 但从 XML 文件读取数据很慢,它主要用来测试项目资产。 某些时候,它们应转换为二进制压缩数据结构,使之比 XML 更快地读入内存。
可以使用游戏引擎 SDK 随附的 Xml2Bin 工具将 XML 文件转换为二进制。 此工具位于Utils/Xml2Bin
文件夹, 而Utils/macosx
文件夹提供预编译版本的 macOS。
问: 我在游戏引擎中导出的角色有问题。 有的部分未导出,有时未按正确的顺序显示。 我该怎么做?
答: 如需与游戏引擎 SDK 集成,Harmony的所用动画需遵循一定准则。 要构建与游戏引擎 SDK 中的渲染兼容的角色,请把握以下关键点:
- 在“时间轴”视图中创建绑定。 游戏引擎 SDK 数据结构类似于“时间轴”视图的显示内容,高级节点系统不总能正常导出。
- 由于场景中的每个顶层节点都在游戏引擎 SDK 中单独渲染,因此可能没有交集。 而且每个顶层节点将分别孤立于其单独 Sprite Sheet 中,便于艺术家更好地对角色分段存储。 如果您创建的角色拥有顶层节点,但不希望有以上效果,请创建一个顶层组或定位钉将它们组合。
- 必要时请使用 micro-Z 排序。 在没有 Z 排序的情况下,子图层出现在父图层之后(如 Harmony)。 如需更改排序,请对子图层增加 Z 向偏置。
- 导出脚本不处理纯位图图像。 但支持 Toon Boom 矢量绘图和 Toon Boom 位图绘图。
- 导出脚本不处理符号。
问: 播放游戏时,始终默认播放下拉列表第一个动画(通常为闲置动画)。
答: 这是因为动画控制器设置的默认状态是“Idle(闲置)”。 执行以下操作:
使用 Window Animator 编辑动画控制器。
查看动画状态机。 注意连接 Entry(条目)到 Idle(闲置)状态的箭头。
更改状态机的默认状态,此操作将更改播放模式下播放的动画,并移动箭头。
- 右键单击选择“Make Transition(执行过渡)”,可以建立多个动画的链接进行播放。
游戏开发人员应根据游戏要求更改动画状态机。