欢迎来到淼淼之森的个人小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

unity实战开发之代码优化和常用功能

  |   评论   |   浏览

推荐阅读:

            做某件事的开心之处大概就来源于成就感吧,能带来成就感的事大家是都愿意去做的
                                                                                                                                                                        ———来自小白的装B
好久没写文章了,不是代表我懒了,只是我一直都这么懒的。哈哈哈,开个玩笑,文章虽没有,但是知识还是学到了的。由于豆渣占满了脑子空间,每次知识只能拿小本本记录下来,等到知识积累到一定程度了,参透了其中的奥妙,就将它同大家分享出来。

1.能不使用尽量不用全局广播:Event.Brocast()

2.setdata()会调用脚本的start()和commite()方法
因此,使用了setdata()的地方无须再调用start()或commit()方法

3.分页标签点击事件:当点击的是当前页签直接返回

if pageIdx==clickIdx then return end

4.方法传入参数,能table的就table,不要单个变量传。

table方法:

args={sid=1001,num=10} function(args)

单变量传入:

local sid=1001 local num=10 function(sid,num)

5.配置表数据使用多个字段,先把该数据取出再.字段名
不友好的写法:

local reward=config[idx].reward local num=config[idx].num

优化后写法:

local info=config[idx] local reward=info.reward local num=info.num

6.pop弹窗:以下两种弹窗有遮罩的,不用加Image。

popupmanager.openinsubview(this.gameObject)
view.ispopup = true

7.pop弹窗不要动画打开关闭:

popupmanager.openinsubview(go, true, true, 0) popupmanager.close(go, 0)

8.Rect Transform设置上下拉伸时,修改距离顶部,底部高度,长宽的方法:

local rect = this.gameObject:GetComponent("RectTransform") rect.offsetMax = Vector2.New(0, 0);--顶部 rect.offsetMin = Vector2.New(0, 0);--底部 rect.sizeDelta = Vector2.New(720, 0);--宽高

含义如下:

rect.sizeDelta的x是width rect.sizeDelta的y是height rect.offsetMin 是vector2(left, bottom); rect.offsetMax 是vector2(right, top);

其他属性修改方法:
rect.anchorMin = Vector2.New(0.5, 0.5)
rect.anchorMax = Vector2.New(0.5, 0.5)
rect.pivot = Vector2.New(0.5, 0.5)
rect.localScale = Vector3.New(0.8, 0.8)
9.滑动列表中使用了灰色材质球的,遮罩使用3Dmask

10.spine动画使用:Unity 使用 Spine 动画

11.粒子特效层级问题:修改层级时需要修改粒子特效里所有能修改的层级,比低一级的大一层级即可

12.粒子特效使用方法:

Util.DestroyAllChild(ui.upgradeEff) local UI_jueseshengji = Util.Instance(utils.getuiseffect("UI_jueseshengji")) Util.SetParent(UI_jueseshengji, ui.upgradeEff)

13.隐藏lable描边等

local outline = ui.uplvtxt.gameObject:GetComponent("Outline") local shadow = ui.uplvtxt.gameObject:GetComponent("Shadow") outline.effectColor = "#FFFFFF" shadow.effectColor = "#FFFFFF"

14.滑动列表滑动到指定下标idx

ui.towerList.totalCount = towerTotal ui.towerList:RefillCells(idx)

15.unity设置某物体的父物体

obj.transform:SetParent(go.transform)

16.引用技术:unity对象池之引用技术

17.启用/禁用某组件

local com= getcom com.enabled = bol

18.遍历可能下标不连续表的所有内容

for i, v in pairs(this.myTime) do end

19.移除表中某位置的元素(会改变下标)

table.remove(this.myBigPet,idx)

20.向表插入某元素(默认在最后插入)

table.insert(this.mySmallPet, resp.result)

21.子物体数量

gameObject.transform.childCount

22.动画效果:列表中的item一个一个显示:使用协程,每隔0.05秒后实例化一个item,具体实现方法

ui.coroutine = coroutine.start(function() for i, v in ipairs(_data) do --实例化操作TODO coroutine.wait(0.05) end end)

注意:关掉该界面时,记得将协程停止并销毁

if ui.coroutine then coroutine.stop(ui.coroutine) ui.coroutine = nil end

23.for循环刷新一些图片的时候,试图改变图片透明度,造成卡死现象。

for i = 1, 5 do --刷新图片TODO icon:GetComponent("Image").color = Color.New(255, 255, 255, 0) end

解决过程:排除解决,就先试试单独调用,看调用的方法对不对,如果对,就试试分帧处理,看是不是渲染机制的问题

coroutine.start(function() for i = 1, 5 do --刷新图片TODO icon:GetComponent("Image").color = Color.New(255, 255, 255, 0) end coroutine.wait(0.001) end)

24.循环列表刷新但不滑动

ui.towerList:RefreshCells()

标题:unity实战开发之代码优化和常用功能
作者:shirln
地址:https://www.mmzsblog.cn/articles/2020/07/28/1595904426393.html

如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜爱上游戏开发

Gitalking ...