找回密码
 立即注册
查看: 343|回复: 0

Puerts v13之前的版本添加 Dotween扩展支持

[复制链接]
发表于 2022-1-12 13:20 | 显示全部楼层 |阅读模式
Dotween扩展在Ts里不生效,甚至报错方法undefined

平常在unity里使用Dotween,习惯通过代码编写一些小动画,dotween的扩展用起来也很舒服 transform.DoScale这些用起来很方便也易读。

而在ts里使用这些扩展就遇到了问题,在ts 的Configure里添加Dotween之后,在ts里也可以调用dotween代码,像 doFade、doScale还有Sequence.Insert等等都可以在编写Typescirpt脚本里使用,但在编译为js在unity里运行时,就会出现无效或者直接异常方法undefine的情况。
造成这种情况的一部分原因是,有相同的声明方法覆盖了正确的方法,导致指向的方法不对。
解决

在低版本的puerts中要正常使用需要 扩展函数$extension()
官方链接:https://github.com/Tencent/puerts/blob/master/doc/unity/manual.md
namespace PuertsTest{    public class BaseClass    {    }    public static class BaseClassExtension    {        public static T Extension1<T>(this T a) where T : BaseClass        {            Debug.Log(string.Format("Extension1<{0}>", typeof(T)));            return a;        }    }}import {PuertsTest} from 'csharp'import {$extension} from 'puerts'$extension(PuertsTest.BaseClass, PuertsTest.BaseClassExtension);let obj = new PuertsTest.BaseClass();obj.Extension1();
所以在项目初始化的脚本里添加
$extension(UnityEngine.Component, DG.Tweening.ShortcutExtensions);$extension(UnityEngine.Transform, DG.Tweening.ShortcutExtensions);$extension(UnityEngine.RectTransform, DG.Tweening.ShortcutExtensions); // DoScale// $extension(UnityEngine.RectTransform, DG.Tweening.DOTweenModuleUI); // DoAnchorPos$extension(DG.Tweening.Tweener, DG.Tweening.TweenExtensions);$extension(DG.Tweening.Tweener, DG.Tweening.TweenSettingsExtensions);$extension(DG.Tweening.Sequence, DG.Tweening.TweenExtensions);$extension(DG.Tweening.Sequence, DG.Tweening.TweenSettingsExtensions);$extension(UnityEngine.UI.Image, DG.Tweening.DOTweenModuleUI);$extension(UnityEngine.UI.Text, DG.Tweening.DOTweenModuleUI);$extension(TMPro.TextMeshProUGUI, DG.Tweening.DOTweenModuleUI);$extension(UnityEngine.CanvasGroup, DG.Tweening.DOTweenModuleUI);
    这里有对统一组件进行了两次扩展,比如Sequence,是因为它的扩展方法在多个扩展类里。想知道某个ui组件需要对应哪个Dotween的扩展类,直接在C#调一下方法,然后进去看方法属于哪个类就知道了
  • 这里有个未解决的bug,RectTransform继承了Transform
    DoScale属于 DG.Tweening.ShortcutExtensions
    DoAncchorPos属于 DG.Tweening.DOTweenModuleUI
    而RectTransform两个方法都用到了,但如果同时添加这两个扩展,会出现js执行异常(目前尚未解决,好像是js的代码没执行)而只添加DG.Tweening.DOTweenModuleUI,RectTransform.DoScale不会执行,会有警告。但同时使用 DoScaleX 和 DoScaleY可以绕过这个问题而且能正常执行。
不扩展是用Dotween的方式

通过命名空间和扩展类直接调用方法
比如DoFade 在DG.Tweening.DOTweenModuleUI里
DG.Tweening.DOTweenModuleUI.DoFade(this.image,1,1)
同理 sequence
DG.Tweening.TweenSettingsExtensions.Insert(this.seq,0,Tween)升级Puerts至最新版本 在v12还是v13已经修复了这个问题只需在扩展列表里添加就好,不用在手动扩展

releasehttps://github.com/Tencent/puerts/releases
顺便贴一个查看puerts的版本号的地方

https://github.com/Tencent/puerts/blob/master/unity/Assets/Puerts/Src/JsEnv.cs#L67
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 21:29 , Processed in 0.137435 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表