在Unity游戏开发中,"lua点击拖动运动标准.txt"文件主要介绍了如何通过Lua脚本实现预定义的阶段性运动控制。在这个场景中,开发者关注的是如何精确地控制一个UI元素(例如面板或游戏对象)在不同阶段的位置变化,以模拟点击和拖动操作。 首先,文件中定义了一个`localposGather`数组,它包含了八个不同的阶段位置,每个阶段对应一个x轴坐标,y轴保持为0,且有各自的缩放比例。这些阶段是根据需求设计的,可能代表了UI元素在不同位置的展示状态。通过这种方式,开发者可以为移动过程设置一个明确的标准映射长度,比如从-1980到1980像素。 接下来,`localparameters`变量存储了关键的参数,如`standardMoveLength`(单元标准移动距离)、`stepLength`(单步最小移动距离,用于拖拽释放后的微调)、`delayTime`(移动间隔时间)、`underWay`(标志移动是否正在进行)、`middleIndex`(主显示位置)、`target`和`targetEnd`(移动方向指示)以及`integer`(当前阶段偏移量)和`maxTime`(点击按钮时的最大移动时间)。 `functionInit(panelAsset)`是一个初始化函数,接收面板组件作为参数。它设置了UI元素的皮肤对象(mSkin),包括移动内容的游戏对象、奖励区域和事件触发器。该函数还监听了两个事件:`Event_Drag`(拖动开始)和`Event_EndDrag`(拖动结束),以便在相应的时间触发移动逻辑。 当用户点击并开始拖动UI元素时,脚本会根据`target`和`targetEnd`的值以及当前的`integer`值,开始按照`standardMoveLength`和`stepLength`逐步移动。如果`maxTime`不为0,点击按钮时则会设定一个固定的时间限制来控制整个移动过程。在移动过程中,`delayTime`用于控制移动的平滑性,避免瞬间跳动。 这个文本提供了在Unity中使用Lua脚本实现一个具有预定义阶段的拖动运动机制的方法,适用于精细控制UI元素在不同位置的交互体验。开发者可以根据具体项目需求调整这些参数,创建出流畅且符合预期的动画效果。
local posGather={[1]={x=-1980,y=0,scale=1},[2]={x=-1320,y=0,scale=1},[3]={x=-660,y=0,scale=1},[4]={x=0,y=0,scale=1},
[5]={x=660,y=0,scale=1},[6]={x=1320,y=0,scale=1},[7]={x=1980,y=0,scale=1},}
--(standardMoveLength--单元标准移动距离,stepLength--单步最小移动距离(拖拽释放后移动使用),delayTime--间隔时间,underWay--移动标记,middleIndex--主显示位置)
--{target--移动方向(1-向上,0-静止,-1-向下),targetEnd--最后切换动作(同上),integer--当前单元偏移量,maxTime--最长到位时间(点击按钮使用)}
local parameters={ standardMoveLength=510,stepLength=40,maxTime=0.4,delayTime=0.04,underWay=false,middleIndex=4,target=0,targetEnd=0,integer=0,}
local moveGather={}--移动单元集合
function Init(panelAsset)
mSkin={}
mSkin.MoveContent=panelAsset.transform:Find("TotalMoveSV/Viewport/Content").gameObject
mSkin.TotalReward1=panelAsset.transform:Find("TotalPeppersUnit/TotalReward1").gameObject
FileMoveGather()
mSkin.Triggers=mSkin.TotalMoveSV:GetComponent("EventTrigger").triggers
mSkin.Triggers[0].callback:AddListener(Event_Drag)
mSkin.Triggers[1].callback:AddListener(Event_EndDrag)
end
--点击单元,自动移动到主推未(obj=mSkin.TotalReward1)
function Click_Move(obj)
if parameters.underWay then--等待归位才能点击W
return
end
local spaceDiff=moveGather[obj].PosIndex-parameters.middleIndex
parameters.targetEnd=0
if spaceDiff<0 then
parameters.targetEnd=1--点击向上运动补偿,其它没有
end
local steps=math.modf(parameters.maxTime/parameters.delayTime)+1
local speed=-spaceDiff*parameters.standardMoveLength/steps
MoveToEnd(parameters.delayTime,steps,speed)
end
--以mSkin.MoveContent的位置y为监听对象,每走standardMoveLength长度,界面所有UI移动一个位置
function Event_Drag(data)
parameters.underWay=true
local contentX=UIRectTransform.GetAnchorPos(mSkin.MoveContent).x
local remainder=math.fmod(contentX,parameters.standardMoveLength)--余数
local integerReal=math.modf(contentX/parameters.standardMoveLength)--整数
if integerReal~=parameters.integer then
if integerReal>parameters.integer then--向前移动
parameters.target=1
parameters.integer=integerReal
elseif integerReal<parameters.integer then--向后移动
parameters.target=-1
parameters.integer=integerReal
end
ChangeTarget(parameters.target)
elseif parameters.integer==0 then
if parameters.target==0 then--启动移动
if remainder>=0 then--向上移动
parameters.target=1--仅做移动方向判断
ChangeTarget(0)--添加初始化移动速度
else--向下移动,需要改变锚定起点和相应的速度
parameters.target=-1
ChangeTarget(parameters.target)
end
else--0位置跨越
if remainder==0 then
parameters.target=0
elseif parameters.target*remainder<0 then
剩余7页未读,继续阅读
- 粉丝: 19
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展