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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章