Unity Lua UI界面封装

来源:互联网 发布:阿里郎电影百度云 编辑:程序博客网 时间:2024/05/18 15:25

lua做UGUI界面控制,找到一个界面的所有要用到的控件去绑定事件或者做控制,如果很原始的Find和GetComponent是一个很痛苦的事情,因为UGUI的界面层级都会嵌的比较深

,有很多的重复操作,感受到Lua的灵活与强大,做了一个界面封装:

-- 用于Lua的界面封装类-- 使用方式:-- 1、先找到UI的GameObject,例如 local uiObj = GameObject.Find('UIRoot')-- 2、做lua封装,例如  local view = LuaView.Create(uiObj)-- 3、然后就可以访问其下的元素,例如:-- 访问子元素  view.btnStart.label.gameObject--访问子元素上的ui组件 view.btnStart.label.Text-- 注意:UI的gameObject全路径命名不可完全重复,自身名字不可使用UI组件的名字,否则访问UI的gameObject时会认为是想访问UI组件LuaView={}LuaView.keywords={['Button']=UnityEngine.UI.Button,['GridLayoutGroup']=UnityEngine.UI.GridLayoutGroup,['HorizontalLayoutGroup']=UnityEngine.UI.HorizontalLayoutGroup,['Image']=UnityEngine.UI.Image,['InputField']=UnityEngine.UI.InputField,['RawImage']=UnityEngine.UI.RawImage,['Scrollbar']=UnityEngine.UI.Scrollbar,['ScrollRect']=UnityEngine.UI.ScrollRect,['Slider']=UnityEngine.UI.Slider,['Text']=UnityEngine.UI.Text,['Toggle']=UnityEngine.UI.Toggle,['ToggleGroup']=UnityEngine.UI.ToggleGroup,['VerticalLayoutGroup']=UnityEngine.VerticalLayoutGroup,}local viewIndexfunction LuaView.Create(gameObject)local o = {}setmetatable(o,o)o.__index = viewIndex--o.gameObject = gameObjecto.transform = gameObject.transform--return oendfunction viewIndex(view,key)local setV,e = loadstring('function setV(view,v) view.' .. key .. '=v end')local uiComp = LuaView.keywords[key]if uiComp then-- 如果是UI组件local c = view.gameObject:GetComponent(uiComp)c =c or falsesetV(view,c)do return c endelse-- 否则是子物体local g = view.transform:Find(key)g = g or falseif g thenlocal node = LuaView.Create(g.gameObject)setV(view,node)do return node endelsesetV(view,g)do return g endendendend

测试如下:


我用的slua,但是用ulua也一样的,这个也可以用于ngui,改下keywords就行

原创粉丝点击