推荐阅读:

一。使用制作滑动列表:使用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, "\n")
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底部

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. C++ STL-bitset

    1.bitset的声明 #include <bitset> using std::bitset; 2.bitset对象的定义和初始化       可以如下声明一个该类型变量: bitset ...

  2. ArcObjects中IMapAlgebraOp的使用体会

    本文提供使用IMapAlgebraOp接口实现大部分栅格计算的简单方法. 1.首先,ArcObjects提供了很多关于栅格计算的方法,有条件运算.逻辑运算及数学表达式,如下:              ...

  3. Universial robot 运动学

    1 正运动学: 1.1 DH方法理解 第i个坐标系固连在第i个连杆的左端.轴i固连于i-1杆,在i-1杆的右端.  i坐标系固定在i杆上,随这i杆转动. 每个连杆有四个参数,第i个连杆: ai = ( ...

  4. 通过docker安装elasticsearch和安装ik分词器插件及安装kibana

    前提: 已经安装好docker运行环境: 步骤: 1.安装elasticsearch 6.2.2版本,目前最新版是7.2.0,这里之所以选择6.2.2是因为最新的SpringBoot2.1.6默认支持 ...

  5. 【剑指offer】面试题 25. 合并两个排序的链表

    面试题 25. 合并两个排序的链表 NowCoder 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Java 实现 ListNode Clas ...

  6. fputcsv 导出excel,解决内存、性能、乱码、科学计数法问题

    在PHP的日常开发中,时常会需要导出 excel ,一般我们会使用 PHPExcel ,性能强大,但是在数据量大的时候,phpexcel 性能差.内存溢出等各种不可控问题就会出现.因此,如果对导出样式 ...

  7. 使用脚本将AspNetCore发布到IIS上

    首先你必须要了解的是,没有脚本的情况下,如何把AspNetCore的应用发布到IIS上. 大致分为这些步骤: 安装MS C++ 2015 x86&x64 安装正确版本的.NET Core Ru ...

  8. SSL 杂谈

    在电子邮件系统中的开发和维护中,由于安全性的需要,经常会遇到 SSL 相关的问题,这里整理下 SSL 的一些基础知识 什么是 SSL SSL (Secure Sockets Layer) 是一种在应用 ...

  9. Mock常用占位符一览

    1.随机字符串(类型 , 位数)@string(lower,10) lower : 小写字母upper : 大写字母number : 数字 2.随机int(下限 , 上限)@integer(60, 1 ...

  10. PowerShell将运行结果保存为文件

    1. Out-File 示例: get-process | Out-File -filepath a.txt 跟“>”是一样的效果 输出 为普通文本 2. Export-Clixml 示例: g ...