脚本有部分参考于http://www.manew.com/thread-108184-1-1.html,
感兴趣的可以去这个看看。
效果图

运行后的效果

脚本部分:
我分成四部分介绍:
1.读入txt,并分章节存储
2.设置每一页的布局
3.翻页&翻章节
4.改变文字大小和类型

1.读入txt,并分章节存储
思路:读入整个txt文件,保存为string类型,在根据txt的文本分割符,将string分割成string[ ];
再遍历每个string[i];保存进已经设置好保存路径的第 i+1 章.txt中。
注意点:使用脚本读入txt的时候,为了防止中文乱码,最好加上 Encoding.GetEncoding(“gb2312”)。
读入为

           StreamReader r = new StreamReader(fileAddress, Encoding.GetEncoding("gb2312"));

整个这一部分的代码为:

 void CreatTxt(string BookName){string BookUrl = Application.streamingAssetsPath + "/" + BookName;//弄一个文件夹,用来存放一千多个章节的txtif (!Directory.Exists (BookUrl)) {//判断该路径是否存在,如果没有就创建路径,如果有就说明已经创建过啦Directory.CreateDirectory(BookUrl);//创建路径//判读需要拆解的txt是否存在,如果有就ReadToEnd,获取整本书txt全部的string//string s = "";var fileAddress = System.IO.Path.Combine(Application.streamingAssetsPath, BookName + ".txt");FileInfo fInfo0 = new FileInfo(fileAddress);  if (fInfo0.Exists){StreamReader r = new StreamReader(fileAddress, Encoding.GetEncoding("gb2312"));book = r.ReadToEnd();            }  //这里是文本txt的分隔符,就是两个回车键string[] SplitStr = { "\r\n\r\n" };string[] ZhangJie = book.Split(SplitStr, System.StringSplitOptions.None);//把整个string拆解成一个个string最终变成数组int num = 0;//用于记录章节数foreach (string ZhangJieNeiRong in ZhangJie){if (ZhangJieNeiRong.Length > 120){//实际过程中会出现空章节,用一个长度来过滤掉太短的章节,当然也不一定要是120,可以根据需要设置num++;string ZhangJieUrl = BookUrl + "/第" + num + "章.txt";//给每一章设置一个名字存储下来if (!File.Exists(ZhangJieUrl)){//把分别把每一章写进去创建成txtFileStream fs1 = new FileStream(ZhangJieUrl, FileMode.Create, FileAccess.Write);//创建写入文件 StreamWriter sw = new StreamWriter(fs1);sw.WriteLine(ZhangJieNeiRong);//开始写入值sw.Close();fs1.Close();}}}}}

2.设置每一页的布局。
思路:在已给的背景中,我们背景的大小是已经设置好的,我们要根据已给的背景长宽和文字的大小,设置每一行,每一列可以显示多少个字。

        Width = bg.GetComponent<RectTransform>().rect.width;Height = bg.GetComponent<RectTransform>().rect.height;Debug.Log(Width);Debug.Log(Height);text_size.text = Sfont.ToString();    //Sfont为设置了的字体大小    //获取每一行能显示多少字HangZiShu = (int)(Width - (Math.Abs(text.rectTransform.offsetMax.x) + Math.Abs(text.rectTransform.offsetMin.x))) / Sfont;//获取每一页能显示多少行YeHangShu = (int)((Height - (Math.Abs(text.rectTransform.offsetMax.y) + Math.Abs(text.rectTransform.offsetMin.y))) / Sfont / 1.1f);

3.翻页&翻章。
这一部分是重头戏。
我们先从翻章开始讲起,上面说了,我们把每一章都存储为了一个txt。我们取出这一章的txt,根据‘
回车符,将这一章的内容的每一段存为一个string[];遍历每一段,计算一段分成多少行。遍历每一
行,存入TempYe[ i ](这个表示每一页所存的数据,若存入的行数大于等于已经计算好的每一页的容量,就i+1)。

    string[] TempYe = new string[40];int TempYeNum = 0;int TempYeLine = 0;void FanZhang(){      ClearTempYe();//清空TempYe数组var fileAddress = System.IO.Path.Combine(Application.streamingAssetsPath, bname + "/第" + (CurrentZhangJie + 1) + "章.txt");FileInfo fInfo0 = new FileInfo(fileAddress);///string s = "";if (fInfo0.Exists){StreamReader r = new StreamReader(fileAddress);book = r.ReadToEnd();}string[] SplitStr = { "\n" };string[] Line = book.Split(SplitStr, System.StringSplitOptions.None);TempYeNum = 0;TempYeLine = 0;for (int i = 0; i < Line.Length; i++){//获取这一段可以在显示端分为多少行int lineih = (int)Math.Ceiling((double)Line[i].Length / HangZiShu);for (int j = 0; j < lineih; j++){//逐行赋值,该页一共能赋值HangZiShu行,HangZiShu满后赋值下一个TempYeif (j < lineih - 1)TempYe[TempYeNum] += Line[i].Substring(j * HangZiShu, HangZiShu);elseTempYe[TempYeNum] += Line[i].Substring(j * HangZiShu);TempYeLine++;if (TempYeLine >= YeHangShu - 1){TempYeNum++;TempYeLine = 0;}               }if (TempYeLine != 0)TempYe[TempYeNum] += "\r\n";}PlayerPrefs.SetInt("CurrentZhangJie", CurrentZhangJie);}

翻页的话,我们分成了向左翻和向右翻,向右翻需要注意翻到一章的末尾的时候的情况,
向左翻需要注意翻到这一章首页的时候的情况和翻到第一章的第一页的情况:

  void FanYe(){        //翻页对text进行赋值,然后保存一下text.text = TempYe[CurrentYeShu];PlayerPrefs.SetInt("CurrentYeShu", CurrentYeShu);}public void Btn_right(){CurrentYeShu++;if (TempYe[CurrentYeShu] == ""){CurrentZhangJie++;FanZhang();CurrentYeShu = 0;}FanYe();}public void Btn_left(){CurrentYeShu--;if (CurrentYeShu < 0){/   if (CurrentZhangJie == 0){CurrentYeShu = 0;return;}else{CurrentZhangJie--;FanZhang();CurrentYeShu = TempYeNum;}}FanYe();}

4.改变文字大小和类型
字体变大变小的原理是一样的,我们就只讲以下文字变大的方式;
我们想要文字变大,一定要重新计算一页的行数和列数,重新计算TempYe[ i ](这个表示每一页所存的数据)。

    public void Add_size(){if (Sfont < 60){Sfont++; //字体大小            //获取每一行能显示多少字HangZiShu = (int)(Width - (Math.Abs(text.rectTransform.offsetMax.x) + Math.Abs(text.rectTransform.offsetMin.x))) / Sfont;//获取每一页能显示多少行YeHangShu = (int)((Height - (Math.Abs(text.rectTransform.offsetMax.y) + Math.Abs(text.rectTransform.offsetMin.y))) / Sfont / 1.1f);text_size.text = Sfont.ToString();FanZhang();text.fontSize = Sfont;// FanYe();Debug.Log(TempYe[CurrentYeShu]);   text.text = TempYe[CurrentYeShu];}}

改变字体类型,这个整体思路比较简单,但是实现起来挺麻烦的。

我们可以注意到,每一个按钮,名字和他自己本身的字体类型是一一对应的。所有我们可以根据
按钮的文字类型,设置整个小说内容的字体类型。
难点在于批量管理按钮,获取按钮的text的字体类型对小说内容字体类型改变。
我们使用Button[ ],数组的方式批量管理。为按钮赋予点击事件

for (int i = 0; i < font_style.Length; i++){font_style[i].onClick.AddListener(Font_style);}

获取按钮的text的字体类型对小说内容字体类型改变

text_font = EventSystem.current.currentSelectedGameObject.GetComponent<Button>().transform.Find("Text").GetComponent<UnityEngine.UI.Text>();
text.font = text_font.font;

需要注意 text_font(类型为Text)最好设置为全局变量,不然会报错。

最后,完结撒花。

unity 仿手机小说阅读器相关推荐

  1. 安卓手机小说阅读器_书城小说阅读器app下载_书城小说阅读器手机版下载

    书城小说阅读器是一款智能小说阅读软件,可以智能搜索全网的小说,通过关键字搜索小说,一键轻松阅读小说,感兴趣的朋友快来下载书城小说阅读器吧. 书城小说阅读器app特色 1.内置智能查找.目录查找.关键字 ...

  2. 安卓手机小说阅读器_乐小说阅读器下载手机版-乐小说阅读器app下载安装

    乐小说阅读器app,一款非常不错的小说阅读器,这里的小说资源不仅非常的丰富,而且用户们可以免费任意阅读.小说内容非常的优质,阅读界面非常的清爽简洁,无任何广告弹出.喜欢看小说的就下载试试吧! 关于乐小 ...

  3. 安卓手机小说阅读器_百万小说阅读器app免费版下载-百万小说阅读器app手机版下载v1.4...

    百万小说阅读器app这款小说中的资源堪称全网最齐全的且这里的内容十分丰富,能让你在这里阅读的时候有更多的免费资源的选择,而且这里还分有男女频道,让你在这里阅个痛快哦.还可以自动翻页,解放双手,提高用户 ...

  4. 安卓手机小说阅读器_【手机软件】安卓+iOS双箭齐发,全网小说阅读神器,且iOS版已上架!无广告、免登陆、全免费!...

    Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明 大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除. 每期文章末尾都会有关键词,在公众号发消息处回 ...

  5. 安卓手机小说阅读器_【趣读小说大全APP安卓】趣读小说大全手机app下载 v1.0.0 免费版...

    趣读小说大全APP是一款十分好用的在线小说阅读软件,一款能够让每一个用户都能在这里轻松体验最简单的小说阅读,每天都能在这里发现更多的阅读精彩.趣读小说大全APP手机版转为每一个用户实时推送最新的小说资 ...

  6. 安卓手机小说阅读器_小说迷安卓app2020最新版下载安卓版下载_小说迷安卓app2020最新版下载v3.1.8手机版apk下载...

    小说迷是一款小说迷必备的小说阅读软件(里诺下载站提供).软件包含了众多的优秀小说,小说的涵盖量广,可以在软件上找到想要的小说资源.软件内不仅会涵盖各种小说资源,还有上万本原创的小说资源,资源更多更丰富 ...

  7. 安卓手机小说阅读器_畅初小说app安卓版下载-畅初小说安卓手机版v1.1.1免费下载...

    畅初小说是新上线的小说阅读平台,这个软件上准备的小说资源很适合年轻人来阅读,软件中的小说类型非常丰富,可以满足所有用户们阅读小说的需求,而且软件上的小说还可以进行下载阅读,直接在平台上搜索自己需要的小 ...

  8. 安卓手机小说阅读器_软件丨安卓手机(小说+漫画 )究极体

    今天为大家分享一款究极软件,究极,顾名思义,比之高级,超级还要狠的角色,究极体.到底什么是究极体呢,帮帮本着学习的原则,在百科上搜索了一下,以下是百科对究极体的解读,不过好像跟今天分享的软件有点不搭边 ...

  9. 安卓手机上有哪些好用的小说阅读器?

    现在,使用手机阅读的人真的越来越多了,我在地铁通勤路上经常能看到有人拿着手机看小说.作为小说爱好者,经过多款测评,选出以下小说阅读器,体验相对较好,推荐给喜欢在手机上看小说的朋友们. 第一款:Neat ...

最新文章

  1. jQuery 人脸识别插件,支持图片和视频
  2. 如何处理resource not found for the segment XXXXX error message
  3. nigix文件解析漏洞
  4. Zookeeper——一致性协议:Zab协议
  5. ELK之收集haproxy日志
  6. ruby+selenium-webdriver一步一步完成自动化测试(6)—-生成测试报告
  7. 安装配置Greenplum
  8. const限定符用法汇总
  9. Android唤醒屏幕
  10. 基于速度学习机的局部感受野
  11. Python3利用BeautifulSoup4抓取站点小说全文的代码
  12. 直接可以用的Python和OpenCV检测及分割图像的目标区域例子
  13. 把QUERY的输出结果作为数据源_小七_新浪博客
  14. ViewPager的翻页动画
  15. 微生物增殖java_Java实现微生物增殖
  16. 南京大学计算机学院英才计划,强基计划|南京大学信息与计算科学专业:三院联合师资,本硕博衔接培养信息计算和AI人才...
  17. 关于什么是物联网?没有比这篇文章更全的了
  18. ug10.0许可证服务器失败,ug10.0许可错误
  19. iOS开发 : Navigation Bar的简单设置
  20. AFNetworking(v3.1.0) 源码解析

热门文章

  1. ecs 对比 本地服务器_【阿里云备忘录】【ECS】【云盘】挂载、卸载、扩容
  2. 我的微信小程序完整项目
  3. 电脑微信号,Win10电脑登录多个微信号的方法
  4. java中 参数的调用_Java中的参数调用
  5. 弘辽科技:淘宝店铺标志怎么做?如何制作淘宝店标?
  6. UnionLotto随机摇号程序
  7. ec20 复位命令_EC20指令
  8. 调通sina33m下的GC0308(分色排版)V1.0
  9. Visio文件插入LaTeX/PDF另存为eps格式后导入LaTeX显示不全
  10. ZOJ 2316 Matrix Multiplication(思路)