Unity3d实现翻书效果

此教程需要用到Book-Page Curl Pro插件,unity商店里有,需要插件和工程的话留邮箱
1、将插件中的bookPro复制成自己的prefab,将page0和page1提出来做prefab ,多余的page删掉,
并将RightPageShadow移出来并隐藏(这一步很重要);

适当把本来的0页与1页隐藏
2、写一个LoadBook的脚本挂上

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;public class LoadPage : MonoBehaviour
{public GameObject pagePrefab0;public GameObject pagePrefab1;public GameObject MyBook;public Sprite WhitePage;//如果页数是奇数的话加一张空白页private BookPro bookPro;private List<GameObject> pagePrefabsList;//public GameObject image;// 储存获取到的图片List<Texture2D> textures = new List<Texture2D>();List<Sprite> sprites = new List<Sprite>();// Use this for initializationvoid Start(){bookPro = MyBook.GetComponent<BookPro>();load();CreatePagePrefabs();bookPro.UpdatePages ();}void load(){List<string> filePaths = new List<string>();//string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";//string[] ImageType = imgtype.Split('|');//for (int i = 0; i < ImageType.Length; i++)//{//    //获取d盘中a文件夹下所有的图片路径//    string[] dirs = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Pics", ImageType[i]);//    for (int j = 0; j < dirs.Length; j++)//    {//        filePaths.Add(dirs[j]);//    }//}//获取d盘中a文件夹下所有的图片路径string[] dirs = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Pics", "*.JPG");for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);}for (int i = 0; i < filePaths.Count; i++){Texture2D tx = new Texture2D(100, 100);tx.LoadImage(getImageByte(filePaths[i]));textures.Add(tx);sprites.Add(Sprite.Create(tx, new Rect(0, 0, tx.width, tx.height), Vector2.one / 3));}if (sprites .Count %2!=0){sprites.Add(WhitePage);//如果页数是奇数的话加一张空白页}}/// <summary>/// 根据图片路径返回图片的字节流byte[]/// </summary>/// <param name="imagePath">图片路径</param>/// <returns>返回的字节流</returns>private static byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open);byte[] imgByte = new byte[files.Length];files.Read(imgByte, 0, imgByte.Length);files.Close();return imgByte;}private void CreatePagePrefabs(){int pageCount = textures.Count;pagePrefabsList = new List<GameObject>();for (int i = 0; i < pageCount; i++){if (i % 2 == 0){//pagePrefab0就是page0的预制体GameObject gab = Instantiate(pagePrefab0) as GameObject;gab.transform.SetParent(bookPro.transform);gab.GetComponent<RectTransform>().sizeDelta = bookPro.RightPageTransform.GetComponent<RectTransform>().sizeDelta;gab.GetComponent<RectTransform>().pivot = bookPro.RightPageTransform.GetComponent<RectTransform>().pivot;gab.GetComponent<RectTransform>().anchoredPosition = bookPro.RightPageTransform.GetComponent<RectTransform>().anchoredPosition;gab.GetComponent<RectTransform>().localScale = bookPro.RightPageTransform.GetComponent<RectTransform>().localScale;gab.GetComponent<Image>().sprite = sprites[i];gab.name = "Page" + i.ToString();pagePrefabsList.Add(gab);}else{GameObject gab = Instantiate(pagePrefab1) as GameObject;gab.transform.SetParent(bookPro.transform);gab.GetComponent<RectTransform>().sizeDelta = bookPro.LeftPageTransform.GetComponent<RectTransform>().sizeDelta;gab.GetComponent<RectTransform>().pivot = bookPro.LeftPageTransform.GetComponent<RectTransform>().pivot;gab.GetComponent<RectTransform>().anchoredPosition = bookPro.LeftPageTransform.GetComponent<RectTransform>().anchoredPosition;gab.GetComponent<RectTransform>().localScale = bookPro.LeftPageTransform.GetComponent<RectTransform>().localScale;gab.GetComponent<Image>().sprite = sprites[i];gab.name = "Page" + i.ToString();pagePrefabsList.Add(gab);}}AddPages(pageCount);}private void AddPages(int pageCount){Debug.Log(pageCount);int parityNum;if (pageCount % 2 == 0)parityNum = pageCount / 2;elseparityNum = pageCount / 2 + 1;Debug.Log(parityNum);bookPro.papers = new Paper[parityNum];for (int i = 0; i < bookPro.papers.Length; i++){var paper = new Paper();if (pagePrefabsList.Count > i + 1){paper.Front = pagePrefabsList[i + i];if (pagePrefabsList.Count > i + i + 1){paper.Back = pagePrefabsList[i + i + 1];}}bookPro.papers[i] = paper;}bookPro.StartFlippingPaper = 0;bookPro.EndFlippingPaper = parityNum - 1;}}

tip:将page预制体上的image替换成Rawimage,并通过更换texture的方式读取更快捷,换完运行起来之后找到报错的代码位置将image替换成Rawimage就行。

Unity3d实现翻书效果相关推荐

  1. Unity3D UGUI实现翻书效果

    提示:素材来源网络,侵权必删 UI翻书效果 效果图 一.准备工作 1.新建Unity工程 2.新建Hierarchy面板 二.使用步骤 1.新建UIBook脚本,挂在UIBook上 2.新建BookM ...

  2. winform实现翻书效果_如何用PPT实现翻书效果?

    在PPT中,我们需要配合内容使用不同的动画效果,加深观众对内容的理解.当内容是讲述故事.过场片段,或是老师的课件讲解教材时,有一个实用好看的动画效果,就是"翻书效果"动画. 例如上 ...

  3. 自定义控件android特效,Android自定义控件eBook实现翻书效果实例详解

    本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import androi ...

  4. html5实现3d翻页效果,利用css3 3d transform制作超逼真翻书效果

    本教程给大家带来一个非常有创意的翻书效果,使用的是css 3D transforms属性和css transitions属性.这里将给你展示两种不同的图书设计:精装书和平装书.这两种设计只需要简单的改 ...

  5. settimeout怎么用_怎么实现一个3d翻书效果

    本篇主要讨论以下两种翻书动画的实现: 第一种是整页翻转的效果: 这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性实现. 第二种折线翻转的效果,如下图所示: 主要是通过计算页面 ...

  6. 前端学习(284):纯css实现翻书效果

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  7. css3书页翻转,CSS3实现3D翻书效果

    先上效果图:(样式有点丑,可以忽略一下下,效果出来了就好,后期加到其他项目中方便更改0.0) 类似翻书效果,原本的意思是使用JS来控制的,点击一次之后使用setInterval去控制书页翻过去的动画, ...

  8. 3d饼图 vue_怎么实现一个3d翻书效果

    本篇主要讨论以下两种翻书动画的实现: 第一种是整页翻转的效果: 这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性实现. 第二种折线翻转的效果,如下图所示: 主要是通过计算页面 ...

  9. cocos2dx实现翻书效果。

    因为项目需求,需要使用cocos实现3d翻书的效果,刚开始确实没有什么思路,cocos2d做3d的效果这不是开玩笑吗.但是,再难也得做啊,没办法. 开始查资料,在百度,google上搜索了好几天,基本 ...

最新文章

  1. (转)一个as3写的减速效果
  2. python无需修改是什么特性_用户编写的python程序无需修改就可以在不同的平台运行,是python的什么特征...
  3. Scikit-learn数据预处理分类变量编码之多标签二值化
  4. 数据分析入门极简书单
  5. 回溯算法团灭子集、排列、组合问题
  6. Exchange2003管理
  7. Linux 系统关于应该把程序安装在目录 /usr 还是目录 /usr/local 下的思考
  8. Redis Scan 命令
  9. android 应用切换动画,怎么在Android应用中利用Activity对动画进行切换
  10. Hibernate映射关系之多对多
  11. oracle 性能诊断工具,oracle性能诊断工具
  12. 剑指offer——面试题44:扑克牌顺子
  13. Vue之设置背景图片
  14. Java Error(四)
  15. 战神引擎1.8斗破斩天泯灭完整开区端+高清地图+动态内观+珍宝+20转+四大陆
  16. github注册以及安装教程
  17. SeaweedFS使用小结
  18. 微信公众平台 使用JS-SDK实现拍照上传功能
  19. SQLSERVER读懂语句运行的统计信息
  20. 极客时间java高级(第二次课程)

热门文章

  1. Python——深入理解urllib、urllib2及requests(requests不建议使用?)
  2. 如何打造园本特色_如何建设本园特色课程
  3. 5G网优培训知识点:掉话及未接通原因分类
  4. Apache Atlas精讲:由浅入深,从概念,原理,使用,到自定义数据模型,生成血缘关系,带你玩转Atlas
  5. Arduino直接控制遥控汽车
  6. 中国鱼探测仪市场深度研究分析报告
  7. hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///
  8. WinDebug相关
  9. 链表4:合并有序链表的3道题
  10. ​人工智能驱动的道路安全网络白皮书(英) (附下载)