【Unity】可玩广告Luna Playable插件的踩坑记录

什么是Luna Playable:https://docs.lunalabs.io/docs/playable/overview

Luna Playable是用来把Unity工程一键转译成H5工程,即可以在网页上直接玩的游戏广告。是不是很强大?直击Unity不支持H5的痛点,大大节省Unity游戏制作可玩广告的成本。之前只能用Cocos Creator单独写一套精简版作为可玩广告,有了Luna Playable就无需多次开发。

然而理想很丰满,现实很骨感。Unity是一个庞大的引擎,到目前为止(v3.4.0) Luana Playable只支持一部分Unity API翻译,遇到不支持的API就会编译报错或执行没有效果。

以下是我踩坑的血泪史,希望后来者不重复踩坑,有据可查。以下是Luna Playable v3.4.0的坑,也许不同版本的坑不同。

0. 首先要安装必须的Runtime,.Net 4.7,必须是相同版本。MSBuild Tools配置位置安装位置

1. 不支持C#的一些专有特性,必须绕过这些特性。

例如,C# 的protect internal关键字,或是这种接口public interface IFsm<T> where T : class,JS是不支持的,无法识别。

切记避免C#代码中出现"//@"字符,Luna翻译时不会跳过"//@"字符开头的代码行,导致翻译后的JS代码报错。

因此首要原则就是避免使用C#奇淫技巧,用最简单的代码特性完成工作。

2. 不支持的部分Unity功能:

不支持Projector, 使用Projector阴影方案的就需要换种方式了。

CharacterController不支持SampleMove,没错,这是游戏常用类,这个比较坑。用SampleMove不会报错,但是角色无法移动,必须使用Move。而且CharacterController无法与其它不带有刚体的Collider触发碰撞回调,须为碰撞体添加RigidBody.

不支持带有Avatar的动画,需要用Animation baker将动画转换成受支持的animation clip。但Animation baker就比较坑,我没有成功,转换后的动画依然无法播放。最终把角色模型的动画类型改成Generic,Avatar Definition改为No Avatar动画可以正常播放,但会出现人物身体缩短扭曲的问题。

LineRenderer设置enable无效,必须改为SetActive()

同时也遇到一个一直无法解决,且没有任何报错提示的奇葩问题。对一个UI节点通过SetActive(false)无法隐藏,最终改为Destroy解决。

3. Unity插件的支持:

Luna不支持dll,所以必须把dll替换为源码。当然,源码内包含JS不支持的特性也会报错。

所以基本上不支持大多数不开源插件,只能绕开。

Luna支持特定版本的常用插件,以下插件因为有JS版的实现,因此可以直接用:

DOTween 1.2.235

TextMeshPro 3.0.0

cinemachine 2.4.0

newtonsoft json 2.0.0 从Package Manager引入"com.unity.nuget.newtonsoft-json": "2.0.0"

对于newtonsoft json还有一个坑,默认不会引入这个js库,必须手动添加到js库中。

 4. Unity序列化参数:

常用[SerializeField] Vector3Int cellPos = new Vector3Int(1, 2, 3);然后在Inspector面板调节参数,但是转译后的JS代码cellPos的真实值依然是(1,2,3),在Inspector面板显示的序列化数值无效!

Luna Playable示例工程用的都是基本数据类型(int / float / bool / GameObject等),不确定是只不支持Vector3Int,还是其它的类型也不支持。

5. Sprite尺寸需严格控制在Luna设置的最大尺寸:

luna默认贴图最大512x512,Unity中也必须把贴图控制在范围内。

否则,TextMeshPro富文本图标无法正常显示,必须把图集控制在最大尺寸内。

Sprite显示会有位置偏移。

6. End Card Builder插件:

Luna Playable给提供了End Card插件,即可玩广告结束后弹出游戏下载跳转界面。

 第一个坑,开发人员粗心大意,把EndCardController一个代码块放到函数体外,导致Build JS报错。可把整个代码块移动带Start方法中。

第二个坑,Build H5成功后,Develop模式下在浏览器预览一切正常。但是上传到Luna后台(Playground)后预览却无法弹出End Card。

原因是luna代码优化机制把程序中用到的类型给排除掉了,需要手动取消排除勾选。

至此,虽然还有一些H5与Unity运行效果不统一的问题,但也勉强能凑合使用了。在官方技术人员的协助下,几乎凭借一己之力总用把坑踩完。

总的来说Luna如果成熟之后很强大,但现阶段易用性还很差。由于是第一次用Luna Playable,整个耗时7天才勉强完全成功。这个时间几乎足够把Unity核心游戏逻辑移植到Cocos Creator,做个精简版的H5可玩广告。

猜你喜欢

转载自blog.csdn.net/final5788/article/details/123910206
今日推荐