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

推荐阅读:

  •  我的CSDN
  •  我的博客园
  •  QQ群:704621321
  •  我的个人博客

      做某件事的开心之处大概就来源于成就感吧,能带来成就感的事大家是都愿意去做的
                                                                                          ———来自小白的装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=10function(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游戏开发)