zoukankan      html  css  js  c++  java
  • unity和lua开发游戏常备技能

    推荐阅读:

    一。使用制作滑动列表:使用UILayout做虚拟列表

    在这里插入图片描述

    ui.list = base:findcom("center/ScrollView/Viewport/Content", "UILayout")
    ui.list.onCreate = base.createrender
    ui.list.onUpdate = base.updaterender
    ui.list.ItemRenderer = Asset:LoadAsset(asseturi.getassetpath(base.module, "manualItem"))
    
    --创建item
    function base.createrender(go)
        local render = {}
        render.lv = utils.findtext(go, "lv")--等级名字
        taskitems[go] = render
    end
    刷新item
    function base.updaterender(go, index)
        local render = taskitems[go]
        local currLv=lv
        if lv>index then
            --已达到等级
            render.lv="已达成"
        else
            render.lv="未达成"
        end
    end
    

    需要注意的是:如果滑动过程中,列表中数据出现混乱,可以考虑是列表的item大小的问题。由于大小item差异,导致UILayout脚本里计算出现问题。

    二。使用Slider制作进度条

    使用Slider做进度条时,如果不想支持触摸滑动,应将Slider组建下的Interactable取消勾选

    三。使用InputField制作输入框

    如果只希望输入整数,则修改InputField的ContentType为IntergetNumber
    在这里插入图片描述

    ui.manualLv = utils.findinput(go, "InputField")
    --实时监听文本框输入内容,控制其范围
    utils.addchangeevent(ui.manualLv, base.inputlimit)
    function base.inputlimit(_input, _id, _str)
        local maxnumber = #ui.proto - commonmodel.activeDatas.manual_syn.level
        local temp = tonumber(_str)
        if temp then
            if temp >= maxnumber then
                ui.manualLv = maxnumber
            elseif temp <= 0 then
                ui.manualLv = 1
            else
                ui.manualLv = temp
            end
        end
    end
    

    四。使用使用DOTween制作动画

    (1)InsertCallback在给定的时间位置上放置一个回调函数。

    local seq = DOTween.Sequence()
    seq:InsertCallback(1, function()
        labelpopup.show("提示")
    end)
    

    代码功能:延迟一秒显示一个文本提示
    (2)DOScale放大缩小效果

    obj.transform.localScale = Vector3.New(0.2,0.2,0.2)
    --SetEase()设置动画曲线
    obj.transform:DOScale(Vector3.New(1,1,1), 0.18):SetEase(Ease.OutBack)
    

    (3)Sequence:相当于一个Tweener的链表,可以通过执行一个Sequence来执行一串Tweener,使用Sequence类可以方便的组织

    local seq = DOTween.Sequence()
    --Append:在Sequence的最后添加一个tween。
    seq:Append(strans:DOLocalMove(pos, 0.3, false):SetEase(Ease.OutExpo))
    seq:Append(strans:DOLocalMove(target1, 0.3, false):SetEase(Ease.InBack)) 
    seq:Append(strans:DOLocalMove(pos, 0.2, false)) 
    --AppendInterval:在Sequence的最后添加一段时间间隔。
    seq:AppendInterval(0.05)
    
    seq:Append(mtrans:DOLocalMove(target2, 0.3, false):SetEase(Ease.InBack)) 
    seq:Append(mtrans:DOLocalMove(mpos, 0.2, false))  
    seq:AppendInterval(0.05)
    
    seq:Append(strans:DOLocalMove(target1, 0.3, false):SetEase(Ease.InBack))
    seq:Append(strans:DOLocalMove(pos, 0.2, false))
    seq:AppendInterval(0.1)
    seq:Append(strans:DOLocalMove(spos, 0.3, false):SetEase(Ease.OutExpo))
    seq:Play()
    
    seq:InsertCallback(0.3, function()
    
    end)
    
    seq:InsertCallback(0.6, function()
    
    end)
    
    seq:OnComplete(function()
    
    end)
    

    五。判断Table表是否为空

    确定表是否为空的最有效方式(即,当前不包含数组样式值或字典样式值)
    方法一:

    if not next(myTable) then
        -- Table is empty
    end
    

    注意:这里的#操作符不够用,因为它只对表中的数组样式值进行操作 - 因此#{test=2}无法区分,#{}因为两者都返回0.还要注意检查表变量是否nil不够,因为我不寻找零值,而是具有0个条目(即{})的表格。
    方法二:

    if next(myTable) == nil then
        -- myTable is empty
     end
    

    测试:

    local myTable={[false]=0}
    if not next(myTable) then
        printlog("空表","shirln**********")
    else
        printlog("非空","shirln&&&&&&&&&&&")
    end
    if next(myTable) == nil then
        printlog("空表","shirln!!!!!!!!")
    else
        printlog("非空","shirln@@@@@@@@@@@")
    end
    

    输出:

    printlog("空表","shirln**********")
    printlog("非空","shirln@@@@@@@@@@@")
    

    可见,方法二比方法一更有效一些

    六。赋值与复制

    赋值:引用变量的地址
    复制:复制变量的值
    在Lua中,使用赋值运算符"="进行浅拷贝的时候,分两种情况:
    (1)拷贝对象的类型是string、number、boolean这些基本类型的时候,会进行复制,创建一个新的对象,拷贝出来的对象和原来的对象互不影响,所以修改拷贝出来的对象的值不会影响到原来的对象的值!
    (2)拷贝对象的类型是table的时候,则是直接进行引用,拷贝出来的对象和原来的对象实际上是同一个对象,所以修改拷贝出来的对象中的元素的值也会使原来的对象中元素的值发生改变!
    测试:
    (1)number

        local test=10
        local test1=test
        test1=5
        printlog(test,"shirln^^^^^^^^^^^^^1")
        printlog(test1,"shirln^^^^^^^^^^^^^1")
    

    (2)表

        local data={}
        data.sid=101
        data.quality=4
        data.pos=1
        local copyData=data
        copyData.pos=5
        printlog(data,"shirln*********1")
        printlog(copyData,"shirln*********2")
    

    七。Time.timeScale

    Time.timeScale = 0 可以暂停游戏,Time.timeScale = 1 恢复正常,但这是作用于整个游戏的设置,不单单是当前场景,记得在需要的时候重置回Time.timeScale = 1。当然也可以使用Time.timeScale来做游戏的1倍、2倍整体加速。

    八。lua I/O从本地存取信息

    -- 序列化数据
    local function encodechatdata(data)
    	local result = {}
    	result[1] = data.tm
    	result[2] = data.info
    	return table.concat(result, "|")
    end
    --存信息
    local data = encodechatdata(v)
    -- local data = table.concat(data, "
    ")
    local path=""--存储的文件位置
    local path = getlocalfilepath(path)
    local file = io.open(path, "w")
    if file then
        file:write(data)
        file:flush()
        file:close()
    end
    -- 反序列化数据
    local function decodechatdata(data)
    	local args = utils.split(data, "|")
    	local result = {}
    	result.tm = args[1]
    	result.info = args[2]
    	return result
    end
    
    --获取本地信息
    local path = getlocalfilepath(uid)
    	local file = io.open(path, "r")
    	if not file then
    		return {}
    	end
    	
    	local data = {}
    	pcall(function() --pcall防止读取错误数据
    		for line in file:lines() do 
    			local data = decodechatdata(line)
    			table.insert(data, data)
    		end
    	end)
    
        file:close()
        return data
    end
    

    九。滑动列表顶部底部判断

    判断滑动列表是否滑倒底部或顶部

    this.gameObject:GetComponent("ScrollRect").verticalNormalizedPosition=1顶部
    
    this.gameObject:GetComponent("ScrollRect").verticalNormalizedPosition=0底部
    
  • 相关阅读:
    @font-face
    闭包
    DOM事件
    DOM属性
    使用谷歌chrome浏览器查看任何标签的固有属性
    chmod命令
    C++笔记之零碎点
    C++学习之 —— 输入输出
    常见素数筛选方法原理和Python实现
    Django的MVT模型
  • 原文地址:https://www.cnblogs.com/shirln/p/11799932.html
Copyright © 2011-2022 走看看