Ulua热更新提高 <六> Ulua使用DoTween改进版


原创

Ulua热更新提高 <四><五>两张其实草稿都在的,但是我感觉还有很多要修改的地方,有些地方我也没有弄透,所以先不发了。最近比较忙,基本没时间写博客,见谅。Ulua里使用DoTween网上能搜索到很多,出自哪里我也不知道了,感谢原作者的努力。全部都是写在LuaFramework框架下的DoTween使用,还有图片和文字的透明度和改变颜色没法使用,有时候经常需要Image改变透明度,很麻烦,今天把代码稍微看了下,做了下修改,已经可以实现了,当然还可以继续增加,包括DoTween里面需要用到的导出静态类,我觉得够用了,就没加了。DoTween在Ulua里还有一个问题,旋转动画竟然不能加完成回调!C#里写没问题,百思不得其解,把代码看了一遍以后,终于照出来了原因了,少包裹了一个旋转Quaternion的泛型,已经修正了。 代码地址在结尾,simpleframework-ugui框架可以直接拿来用,新的LuaFramework修改一下Warp生成的目录就好了,搞这几个问题花了不少时间,搞不好睡不着,不过也好好看了下DoTween的代码,学习到了不少东西。


主要增加两个文件:

ToLuaFile.cs

需要使用的DG.Tweening底下类的方法要加入, typeof(DG.Tweening.ShortcutExtensions46) ,加入这个静态类才能使用Image和Text还有RectTransform等其他的动画方法,我看别的文章都没加这个,使用不方便,一定要加。

    public static Type[] exports = new Type[]
    {
        //这里加入需要的静态类,会生出相应的文件到Wrap文件夹
        typeof(DG.Tweening.TweenSettingsExtensions),
        typeof(DG.Tweening.ShortcutExtensions),
        typeof(DG.Tweening.TweenExtensions),
        typeof(DG.Tweening.ShortcutExtensions46),

    };


ToLuaFileExport .cs

这个文件里主要修改一个地方,否者被报错,需要新建相应的文件夹。

    static string ToLuaPath
    {
        get
        {
            return Application.dataPath + @"/Editor/Wrap/";  //DoTween新增 导出wrap路径
        }
    }



修改两个文件:

ToLuaExport.cs

其他地方,前人已经修改好了,我注视都加了“新增”两个字,也写了一些注释。可以直接替换我的到你的那里使用。主要注意一个地方:

	 //DoTween新增
	
	static bool NeedDotweenNamespace()
	{
		//UnityEngine.Debug.LogError("在warp的类名是"+libClassName);
		switch (libClassName)
		{
            //这里加入的组件能确保你可以在Lua里点出来DOTWEEN的方法。
            //配合ToLuaFile文件加的静态类方法使用。
            //需要使用DG.Tweening.ShortcutExtensions里的函数要加入
            
			case "UnityEngine.Transform":
			case "UnityEngine.AudioSource":
			case "UnityEngine.Camera":
			case "UnityEngine.Component":
			case "UnityEngine.Light":
			case "UnityEngine.Material":
			case "UnityEngine.Sequence":
			case "UnityEngine.Tween":
			case "UnityEngine.Tweener":
			case "UnityEngine.Rigidbody":

            //需要使用DG.Tweening.ShortcutExtensions46里的函数要加入(Image和Text的透明度颜色都在这个类里)
            case "UnityEngine.UI.Image":
            case "UnityEngine.UI.Text":
            case "UnityEngine.RectTransform":
            
               
			case "DG.Tweening.ShortcutExtensions":
			case "DG.Tweening.AutoPlay":
			case "DG.Tweening.AxisConstraint":
			case "DG.Tweening.Ease":
			case "DG.Tweening.LogBehaviour":
			case "DG.Tweening.LoopType":
			case "DG.Tweening.PathMode":
			case "DG.Tweening.PathType":
			case "DG.Tweening.RotateMode":
			case "DG.Tweening.ScrambleMode":
			case "DG.Tweening.TweenType":
			case "DG.Tweening.UpdateType":
			case "DG.Tweening.DOTween":
			case "DG.Tweening.DOVirtual":
			case "DG.Tweening.EaseFactory":
			case "DG.Tweening.Tweener":
			case "DG.Tweening.Tween":
			case "DG.Tweening.Sequence":
			case "DG.Tweening.TweenParams":
			case "DG.Tweening.DOTweenAnimation":
			case "DG.Tweening.DOTweenPath":
			case "DG.Tweening.DOTweenVisualManager":
			case "DG.Tweening.Core.ABSSequentiable":
			case "TweenerCoreV3V3VO":
            case "TweenerCoreQ4V3QO":  //新增的泛型,给旋转用
                

		return true;
		}

		return false;
	} 





WrapFile.cs

包裹文件里增加:

        _GT(typeof(Text)),
        _GT(typeof(Image)),

        //DoTween 
        _GT(typeof(DG.Tweening.ShortcutExtensions)),
        _GT(typeof(DG.Tweening.AutoPlay)),
        _GT(typeof(DG.Tweening.AxisConstraint)),
        _GT(typeof(DG.Tweening.Ease)),
        _GT(typeof(DG.Tweening.LogBehaviour)),
        _GT(typeof(DG.Tweening.LoopType)),
        _GT(typeof(DG.Tweening.PathMode)),
        _GT(typeof(DG.Tweening.PathType)),
        _GT(typeof(DG.Tweening.RotateMode)),
        _GT(typeof(DG.Tweening.ScrambleMode)),
        _GT(typeof(DG.Tweening.TweenType)),
        _GT(typeof(DG.Tweening.UpdateType)),
        _GT(typeof(DG.Tweening.DOTween)),
        _GT(typeof(DG.Tweening.DOVirtual)),
        _GT(typeof(DG.Tweening.EaseFactory)),
        _GT(typeof(DG.Tweening.Tweener)),
        _GT(typeof(DG.Tweening.Tween)),
        _GT(typeof(DG.Tweening.Sequence)),
        _GT(typeof(DG.Tweening.TweenParams)),
		_GT(typeof(DG.Tweening.DOTweenAnimation)),
		_GT(typeof(DG.Tweening.DOTweenPath)),
		_GT(typeof(DG.Tweening.DOTweenVisualManager)),
		_GT(typeof(DG.Tweening.Core.ABSSequentiable)),
		_GT(typeof(DG.Tweening.Core.TweenerCore<Vector3, Vector3, DG.Tweening.Plugins.Options.VectorOptions>)).SetWrapName("TweenerCoreV3V3VO").SetLibName("TweenerCoreV3V3VO"),
        _GT(typeof(DG.Tweening.Core.TweenerCore<Quaternion, Vector3, DG.Tweening.Plugins.Options.QuaternionOptions>)).SetWrapName("TweenerCoreQ4V3QO").SetLibName("TweenerCoreQ4V3QO"),//一定要加Quaternion的泛型,要不然旋转后面除了没有回调也用不了其他DoTween的方法


使用方法:1.导入工程后,编辑器:Lua----------Lua/Export ToLuaExtendFile(生成的文件在Editor/Wrap中)-----然后再GenLua 成中间代码,ULUA就可以使用了。

DoTween使用教程网上挺多的,我就写两句给新手吧。

    function  StepComplete ()
       logError("循环动画中单次完成回调!")
    end

    function  Complete ()
       logError("动画完成回调!")
    end

    Panel.Light[1]:GetComponent('Image'):DOFade(0,2)
    Panel.Light[1]:GetComponent('Image'):DOColor(Color.New(1,1,1,0.5),2)
    Panel.Light[1].transform:DOLocalMoveY(-300,-100, false):SetEase(DG.Tweening.Ease.Linear):SetLoops(-1):OnStepComplete( StepComplete )

    local sequence = DG.Tweening.DOTween.Sequence()   --动画列队
    sequence:Append(  Panel.Light[1]:GetComponent("Image"):DOFade(1,1.5))
    sequence:Append(  Panel.Light[1]:GetComponent("Image"):DOFade(0,1.5))
    sequence:Play()  
    sequence:OnComplete(Complete)


注意:今天发现昨天少加了一个颜色的泛型在 WrapFile 里,需要什么泛型再继续添加就可以了,不加上不能直接使用DoTween的api,下载包里也没有加,自己加吧。

_GT(typeof(DG.Tweening.Core.TweenerCore<Color, Color, DG.Tweening.Plugins.Options.ColorOptions>)).SetWrapName("TweenerCoreCoCoCO").SetLibName("TweenerCoreCoCoCO"),

相应的 ToLuaExport 里也要加:

case "TweenerCoreCoCoCO":



最后附上包下载地址http://download.csdn.net/detail/u012322710/9829413


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值