推荐阅读:

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

  1. ui.list = base:findcom("center/ScrollView/Viewport/Content", "UILayout")
  2. ui.list.onCreate = base.createrender
  3. ui.list.onUpdate = base.updaterender
  4. ui.list.ItemRenderer = Asset:LoadAsset(asseturi.getassetpath(base.module, "manualItem"))
  5. --创建item
  6. function base.createrender(go)
  7. local render = {}
  8. render.lv = utils.findtext(go, "lv")--等级名字
  9. taskitems[go] = render
  10. end
  11. 刷新item
  12. function base.updaterender(go, index)
  13. local render = taskitems[go]
  14. local currLv=lv
  15. if lv>index then
  16. --已达到等级
  17. render.lv="已达成"
  18. else
  19. render.lv="未达成"
  20. end
  21. end

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

二。使用Slider制作进度条

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

三。使用InputField制作输入框

如果只希望输入整数,则修改InputField的ContentType为IntergetNumber

  1. ui.manualLv = utils.findinput(go, "InputField")
  2. --实时监听文本框输入内容,控制其范围
  3. utils.addchangeevent(ui.manualLv, base.inputlimit)
  4. function base.inputlimit(_input, _id, _str)
  5. local maxnumber = #ui.proto - commonmodel.activeDatas.manual_syn.level
  6. local temp = tonumber(_str)
  7. if temp then
  8. if temp >= maxnumber then
  9. ui.manualLv = maxnumber
  10. elseif temp <= 0 then
  11. ui.manualLv = 1
  12. else
  13. ui.manualLv = temp
  14. end
  15. end
  16. end

四。使用使用DOTween制作动画

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

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

代码功能:延迟一秒显示一个文本提示

(2)DOScale放大缩小效果

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

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

  1. local seq = DOTween.Sequence()
  2. --Append:在Sequence的最后添加一个tween
  3. seq:Append(strans:DOLocalMove(pos, 0.3, false):SetEase(Ease.OutExpo))
  4. seq:Append(strans:DOLocalMove(target1, 0.3, false):SetEase(Ease.InBack))
  5. seq:Append(strans:DOLocalMove(pos, 0.2, false))
  6. --AppendInterval:在Sequence的最后添加一段时间间隔。
  7. seq:AppendInterval(0.05)
  8. seq:Append(mtrans:DOLocalMove(target2, 0.3, false):SetEase(Ease.InBack))
  9. seq:Append(mtrans:DOLocalMove(mpos, 0.2, false))
  10. seq:AppendInterval(0.05)
  11. seq:Append(strans:DOLocalMove(target1, 0.3, false):SetEase(Ease.InBack))
  12. seq:Append(strans:DOLocalMove(pos, 0.2, false))
  13. seq:AppendInterval(0.1)
  14. seq:Append(strans:DOLocalMove(spos, 0.3, false):SetEase(Ease.OutExpo))
  15. seq:Play()
  16. seq:InsertCallback(0.3, function()
  17. end)
  18. seq:InsertCallback(0.6, function()
  19. end)
  20. seq:OnComplete(function()
  21. end)

五。判断Table表是否为空

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

方法一:

  1. if not next(myTable) then
  2. -- Table is empty
  3. end

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

方法二:

  1. if next(myTable) == nil then
  2. -- myTable is empty
  3. end

测试:

  1. local myTable={[false]=0}
  2. if not next(myTable) then
  3. printlog("空表","shirln**********")
  4. else
  5. printlog("非空","shirln&&&&&&&&&&&")
  6. end
  7. if next(myTable) == nil then
  8. printlog("空表","shirln!!!!!!!!")
  9. else
  10. printlog("非空","shirln@@@@@@@@@@@")
  11. end

输出:

  1. printlog("空表","shirln**********")
  2. printlog("非空","shirln@@@@@@@@@@@")

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

六。赋值与复制

赋值:引用变量的地址

复制:复制变量的值

在Lua中,使用赋值运算符"="进行浅拷贝的时候,分两种情况:

(1)拷贝对象的类型是string、number、boolean这些基本类型的时候,会进行复制,创建一个新的对象,拷贝出来的对象和原来的对象互不影响,所以修改拷贝出来的对象的值不会影响到原来的对象的值!

(2)拷贝对象的类型是table的时候,则是直接进行引用,拷贝出来的对象和原来的对象实际上是同一个对象,所以修改拷贝出来的对象中的元素的值也会使原来的对象中元素的值发生改变!

测试:

(1)number

  1. local test=10
  2. local test1=test
  3. test1=5
  4. printlog(test,"shirln^^^^^^^^^^^^^1")
  5. printlog(test1,"shirln^^^^^^^^^^^^^1")

(2)表

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

七。Time.timeScale

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

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

  1. -- 序列化数据
  2. local function encodechatdata(data)
  3. local result = {}
  4. result[1] = data.tm
  5. result[2] = data.info
  6. return table.concat(result, "|")
  7. end
  8. --存信息
  9. local data = encodechatdata(v)
  10. -- local data = table.concat(data, "\n")
  11. local path=""--存储的文件位置
  12. local path = getlocalfilepath(path)
  13. local file = io.open(path, "w")
  14. if file then
  15. file:write(data)
  16. file:flush()
  17. file:close()
  18. end
  19. -- 反序列化数据
  20. local function decodechatdata(data)
  21. local args = utils.split(data, "|")
  22. local result = {}
  23. result.tm = args[1]
  24. result.info = args[2]
  25. return result
  26. end
  27. --获取本地信息
  28. local path = getlocalfilepath(uid)
  29. local file = io.open(path, "r")
  30. if not file then
  31. return {}
  32. end
  33. local data = {}
  34. pcall(function() --pcall防止读取错误数据
  35. for line in file:lines() do
  36. local data = decodechatdata(line)
  37. table.insert(data, data)
  38. end
  39. end)
  40. file:close()
  41. return data
  42. end

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

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

  1. this.gameObject:GetComponent("ScrollRect").verticalNormalizedPosition=1顶部
  1. this.gameObject:GetComponent("ScrollRect").verticalNormalizedPosition=0底部

unity和lua开发游戏常备技能的更多相关文章

  1. 使用 Unity 3D 开发游戏的架构设计难点

    Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛.但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D ...

  2. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  3. Hands-On Unity 2018 x 移动游戏开发教程

    Hands-On Unity 2018 x Game Development for Mobile 使用Unity 2018.2创建具有出色游戏功能的精彩游戏   想学习在Unity制作游戏,但不知道 ...

  4. 【远程文件浏览器】Unity+Lua开发调试利器

    Remote File Explorer是一个跨平台的远程文件浏览器,用户通过Unity Editor就能操作运行在手机上的游戏或是应用的的目录文件.比如当项目打包运行到设备上时,可通过Remote ...

  5. 独立开发游戏越来越容易:Unity 发布旗下的最新游戏引擎 Unity 5,依然有免费版(转)

    独立开发者开发游戏正变得越来越容易,因为在游戏设计中很多吃力不讨好的工作可以直接采用像 Epic Games 或 Unity Technologies 这样的游戏引擎来解决.而这几天,游戏引擎商们先后 ...

  6. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)

    ---------------------------------------------------------------------------------------------------- ...

  7. Unity 开发游戏编写代码的技巧

    在平时开发游戏过程中,遇到一些编写代码很繁琐的问题. 我发现我团队中每个人都会遇到,就算打写出来分享下经验. 条件断点 利用IDE提供的工具, 右键断点的时候 输入条件, 当条件达成的时候,断点才能命 ...

  8. GJM : 各大开发游戏引擎

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

    内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...

随机推荐

  1. angular2 ng-if

    ng-if <td ><div class="td-li" > <a (click)="open(i)" class=" ...

  2. Shell脚本运行报错Bad substitution解决办法

    环境Ubuntu18.4.02 脚本运行报错 # sh test.sh test.sh: 2: test.sh: Bad substitution 原因 从 ubuntu 6.10 开始,ubuntu ...

  3. web端调起Windows系统应用程序(exe执行文件),全面兼容所有浏览器

    1. 首先,你要有一个exe可执行文件2. 创建注册表创建注册表有两种方式(以“MyApp.exe”为例): 方式一:可视化编辑Win+R 打开运行,输入 regedit 并回车,进入注册表编辑器新建 ...

  4. IDEA遇到项目包后面出现% classes,% lines covered该怎么解决

    IDEA遇到项目包后面出现% classes,% lines covered该怎么解决 这个问题嘛,我一个同学已经问我第二遍了.这次又是他问的,所以我就写一下教程吧  出现这种问题的原因:就是你点运行 ...

  5. Python 绘图库Matplotlib入门教程

    0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...

  6. 介绍几款常用的在线API管理工具

    在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...

  7. Python03之单引号、双引号、三单引号、三双引号

    今天在学习字符串的时候,发现字符串有时使用单引号,有时使用双引号,而有时还使用三引号.至此我整理如下: 单引号和双引号区别.三单引号和三双引号也没什么区别. 一: 两单引号之间不可以出现单引号,如果出 ...

  8. App客户端性能测试点总结

    一.内存 测试范围1. 空闲状态下的应用内存消耗情况2. 中等规格状态下的应用内存消耗情况3. 满规格状态下的应用内存消耗情况4. 应用内存峰值情况5. 应用内存泄露情况6. 应用是否常驻内存7. 压 ...

  9. 在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)

    原文:在论坛中出现的比较难的sql问题:19(row_number函数 行转列.sql语句记流水) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记 ...

  10. 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

    原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...