原創
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