位置: 编程技术 - 正文

Unity之megaFierstext翻书插件控制代码分析

编辑:rootadmin

推荐整理分享Unity之megaFierstext翻书插件控制代码分析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

需要在Unity实现达到仿真的翻书效果,我们一般可以借助megaFierstext插件来完成。

下载地址: 根据Texture中贴图数量计算出书的页数 创建每一页 为每一页增加三个API脚本 初始化一些控制变量

private float betweenHitPointX; //用于记录鼠标当前位置 private float nextHitPointX; //与上一个鼠标位置进行比较 private int pageNumber; //书的总页数 private int newPageNumber=0; //当前操作的页 public GameObject pageMasterplate; //单页模版 public Transform bookPosition; //生成书籍的位置 private GameObject[] bookPage; //每页对应的数组 private Object[] texAll; //用于存储所有页贴图的数组 private MeshRenderer meshRendererScript; //用于获取当前页MegaPageFlip脚本 //--------------添加每一页所需要的脚本--------------------- private MegaModifyObject megaModifyObjectScript; private MegaPageFlip megaPageFlipScript; private MegaMeshPage MegaMeshPageScript; private Material[] materials; //用于加载的页面的材质球 private Material[] material; //用来存放每张纸业的正反面 private float Downtime=0f; //用于存储时间变量 private float startTurn; private bool pagefan=false; //用于标示是否翻到下一页 private bool pagezheng=false; //用于标示是否翻到上一页

在Update()函数中——开启翻页状态(鼠标左键点击页面时): 获取当前活动页面脚本 将当前页的高度上移 记录当前的初始页面角度 进入翻页状态(给控制变量赋&#;)

if(Input.GetMouseButtonDown(0)&&!pagefan&&!pagezheng){ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, )){ if(hit.transform!=null) { if(hit.transform.name=="right"&&newPageNumber<pageNumber)//点击右边并且当前页小于总页数 { megaPageFlipScript=bookPage[newPageNumber].GetComponent<MegaPageFlip>();//获取当前页脚本 MegaMeshPageScript=bookPage[newPageNumber].GetComponent<MegaMeshPage>(); bookPage[newPageNumber].transform.localPosition=new Vector3(0,0.f,0);//页面的位置稍微上移 startTurn=megaPageFlipScript.turn;//记录初始角度 } if(hit.transform.name=="left"&&newPageNumber>0)//点击左边边并且当前页大于0 { megaPageFlipScript=bookPage[newPageNumber-1].GetComponent<MegaPageFlip>(); MegaMeshPageScript=bookPage[newPageNumber-1].GetComponent<MegaMeshPage>(); bookPage[newPageNumber-1].transform.localPosition=new Vector3(0,0.f,0); startTurn=megaPageFlipScript.turn; } betweenHitPointX=hit.point.x; //获取中间碰撞点的X坐标 } } }

翻页状态(承接上一个状态,持续按下鼠标左键时): 如果鼠标左移,翻页角度减少 如果鼠标右移,翻页角度增加

if (Input.GetMouseButton(0)&&!pagefan&&!pagezheng&&megaPageFlipScript!=null){ Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit1; if (Physics.Raycast(ray1, out hit1, )){ if(hit1.transform!=null) { nextHitPointX=hit1.point.x; //获取最后的碰撞点的X坐标 if(nextHitPointX<betweenHitPointX){//鼠标右移 megaPageFlipScript.turn&#;=2.5f; } else if(nextHitPointX>betweenHitPointX){//鼠标左移 megaPageFlipScript.turn-=2.5f; } betweenHitPointX=hit1.point.x; //更新中间碰撞点的X坐标 } } }

松开手的状态(承接上一个状态,鼠标左键弹起时): 记录当前时间,用作插&#;处理 如果此时页面角度大于一定&#;,则确定页面是否成功翻页

if(Input.GetMouseButtonUp(0)){ Downtime=Time.time;//记录时间,插&#;使用 if(megaPageFlipScript!=null){ if(megaPageFlipScript.turn>){//角度大于,判定可以翻过去,否则翻不过去 pagezheng=true; } else{ pagefan=true; } } }

实现翻页状态(承接上一个状态,鼠标左键弹起后页面归位):

确定是翻过来了还是没有翻过来 插&#;得到角度改变 如果是0或状态,说明翻页完毕 根据初始&#;的状态判定是否翻页完毕

Unity之megaFierstext翻书插件控制代码分析

//正向归位

if(pagefan){ megaPageFlipScript.turn=Mathf.SmoothStep(megaPageFlipScript.turn, 0, Time.time-Downtime); if(megaPageFlipScript.turn==0||megaPageFlipScript.turn==)//0或是归位状态 { if(startTurn!=megaPageFlipScript.turn)//状态不同说明完全翻过去了 { newPageNumber--; bookPage[newPageNumber].transform.localPosition=new Vector3(0,-newPageNumber*0.f,0);//页面下移 } pagefan=false; megaPageFlipScript=null; } }

//反向归位 if(pagezheng){ megaPageFlipScript.turn=Mathf.SmoothStep(megaPageFlipScript.turn, , Time.time-Downtime); if(megaPageFlipScript.turn==0||megaPageFlipScript.turn==) { if(startTurn!=megaPageFlipScript.turn) { bookPage[newPageNumber].transform.localPosition=new Vector3(0,(newPageNumber-pageNumber)*0.f,0); newPageNumber&#;&#;; } megaPageFlipScript=null; pagezheng=false; } }

当我们熟悉代码结构后,便可以根据项目的情况进行灵活的调整翻页的效果。

下面是一个一键翻页的Demo(不需鼠标拖动):

OnGUI()中代码如下:

void OnGUI() { if(pagefan||pagezheng)//正在翻页,则操作无效 return; if(GUI.Button(new Rect(,,,),"下一页")) { if(newPageNumber<pageNumber) { downTime=Time.time;//记录初始状态 megaPageFlipScript=bookPage[newPageNumber].GetComponent<MegaPageFlip>(); startTurn=megaPageFlipScript.turn; MegaMeshPageScript=bookPage[newPageNumber].GetComponent<MegaMeshPage>(); bookPage[newPageNumber].transform.localPosition=new Vector3(0,0.f,0); pagezheng=true;//按下按钮时,将标记直接设置为true } } if(GUI.Button(new Rect(,,,),"上一页")) { if(pagefan||pagezheng) return; if(newPageNumber>0) { downTime=Time.time; megaPageFlipScript=bookPage[newPageNumber-1].GetComponent<MegaPageFlip>(); startTurn=megaPageFlipScript.turn; MegaMeshPageScript=bookPage[newPageNumber-1].GetComponent<MegaMeshPage>(); bookPage[newPageNumber-1].transform.localPosition=new Vector3(0,0.f,0); pagefan=true; } } }

在Update()里面:

isOver参数是表面是不是翻页完毕了。

void Update () { if(pagezheng&&!isOver)//正向翻页未结束 { megaPageFlipScript.turn=Mathf.SmoothStep(megaPageFlipScript.turn,,Time.time-downTime); if(megaPageFlipScript.turn==||megaPageFlipScript.turn==0) { if(startTurn!=megaPageFlipScript.turn) isOver=true; } } else if(pagefan&&!isOver)//反向翻页未结束 { megaPageFlipScript.turn=Mathf.SmoothStep(megaPageFlipScript.turn,0,Time.time-downTime); if(megaPageFlipScript.turn==||megaPageFlipScript.turn==0) { if(startTurn!=megaPageFlipScript.turn) isOver=true; } } else if(pagefan&&isOver)//正相翻页结束 { isOver=false; pagefan=false; newPageNumber--; bookPage[newPageNumber].transform.localPosition=new Vector3(0,-newPageNumber*0.f,0); megaPageFlipScript=null; } else if(pagezheng&&isOver)//反向翻页结束 { isOver=false; pagezheng=false; bookPage[newPageNumber].transform.localPosition=new Vector3(0,(newPageNumber-pageNumber)*0.f,0); newPageNumber&#;&#;; megaPageFlipScript=null; } }

以上便是关于该插件的小小理解,希望对大家有所帮助。

&#;&#;

【解决方法】ECall 方法必须打包到系统模块中 今天在做Unity毕业设计,是一个有客户端和服务器端的RPG游戏,可是开启服务器是报错ECall方法必须打包到系统模块中问题重现:之前的代码是客户端直

Unity VS--在unity中进行断点调试 大家可以从这下载最新版的unityvs。UnityVs1.下载1.安装unityvs。首先我们打开我们下载的unityvs。然后就会看见里面有3个文件,我们双击UnityVS-1.8.1.msi。

【猫猫的Unity Shader之旅】之初识屏幕特效 Shader除了可以处理模型的显示效果外,还有一个腻害的功能就是对要渲染的画面进行整体的处理,也就是屏幕特效。常见的比如《鬼泣4》里的动态模糊

标签: Unity之megaFierstext翻书插件控制代码分析

本文链接地址:https://www.jiuchutong.com/biancheng/381442.html 转载请保留说明!

上一篇:Untiy粒子特效运行时修改Scale(粒子特效代码)

下一篇:Unity VS--在unity中进行断点调试(unity的vs)

  • 印花税额计算及计税基础
  • 确认了收入但是没收入
  • 用友t3凭证日期怎么自动排序
  • 分公司税务登记流程视频
  • 分公司企业所得税汇总缴纳还是单独缴纳
  • 房地产企业回迁房增值税
  • 收到员工归还借款属于现金流量表
  • 增值税普票没有税率怎么回事
  • 销售退回所得税差异怎么处理
  • 金税盘维护费减免政策代码
  • 研发部门房租可以抵税吗
  • 上海电商行业怎么样
  • 增值税普通发票和专用发票有什么区别
  • 企业每季度预缴增值税
  • 公司发生的业务可以转让给子公司嘛?
  • 增值税(滞纳金)
  • 公司购买房产的税费
  • 冲回累计折旧
  • 月末进项税额结转会计分录
  • 香港公司可以给个人打款吗
  • 企业安全库存是什么
  • 增值税一般纳税人申报流程
  • 电子承兑到期怎样接收
  • 资产负债表中资产项目的排列顺序是
  • 增值税税控系统折旧
  • linux 文件夹压缩
  • 财政应返还额度年末有余额吗?
  • php堆和栈
  • 销售产品应交的消费税分录
  • 发票报销的账务怎么处理
  • vue for循环遍历对象取值
  • PHP:imagecreatefromgd()的用法_GD库图像处理函数
  • wordpress优化seo
  • 股权名称应该填什么?
  • 比较好的微信名称有哪些
  • 计提租金怎么做会计分录
  • 处置抵债资产的账务处理
  • 代理记账费用计入什么二级科目
  • 缴纳残保金的计税依据是什么
  • python中for循环的缩进规则
  • 电子客票行程单怎么获取
  • 企业财务报表有附注吗
  • 企业做账会计分录流程
  • 固定资产处置怎么计算
  • 银行存款出现负数
  • 织梦系统网站搭建教程
  • 增值税无票收入负数预警值
  • 如何拉企业纳税申报表
  • 高速公路费如何查询
  • 购买方收到红字发票怎么做凭证
  • 金税盘要交税吗
  • 劳动保护费是否可以抵扣
  • 员工罚款从工资中代扣
  • 营改增后房地产企业如何开票
  • 股份支付应如何进行账务处理?
  • 委托代销确认销售收入
  • 出租写字楼写字楼
  • 债权人和债务人的区别
  • 确定固定资产的标准
  • 代扣的应由职工个人负担的社会保险费计入什么科目
  • 会计账户分类是什么意思
  • 医院会计怎么做账
  • sql2005 create file遇到操作系统错误5拒绝访问 错误1802
  • macbook的qq怎么更换背景
  • mom.exe是什么程序
  • windows7的管理在哪里
  • 台式装win7
  • uiview和calayer关系
  • div如何排版
  • linux自动清理磁盘空间
  • 最常见的左向右分流型心脏病是
  • javascript的sort
  • js做运算
  • jquery增加
  • jquery.form.js实现文件上传
  • 控件begininvoke
  • 电子税务局打印发票提示本机未检测到
  • 绿化工程项目
  • 徐州市哪些区域有疫情
  • 国家电子税务登录入口
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设