Unity5.x实战开发指南

Unity5.x实战开发指南 pdf epub mobi txt 电子书 下载 2025

[美] Matt,Smith,Chico,Queiroz,刘天慧 著
图书标签:
  • Unity5
  • x
  • Unity
  • 游戏开发
  • C#
  • 实战
  • 教程
  • 编程
  • 图形学
  • 引擎
  • 开发指南
  • 入门
想要找书就要到 图书大百科
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 清华大学出版社
ISBN:9787302473688
版次:1
商品编码:12299622
包装:平装
开本:16开
出版时间:2017-12-01
用纸:胶版纸
页数:488
字数:632000
正文语种:中文

具体描述

编辑推荐

亲手打造自己的虚拟世界!感受造物主的灵感!就在本书!

内容简介

本书详细阐述了与Unity相关的基本解决方案,主要包括核心UI,道具栏UI,2D动画,创建贴图和材质,相机,光照效果,控制3D动画,位置、运动和导航,音频,与外部文件和设备协同工作,利用附加特性和优化操作改善游戏以及编辑器扩展等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

目录

目 录

第1章 核心UI—消息、菜单、积分榜和计数器 1

1.1 简介 1

1.2 显示“Hello World”文本消息 5

1.3 显示数字时钟 8

1.4 显示倒计时数字计数器 11

1.5 生成渐变消息 13

1.6 显示具有透视效果的3D文本消息 15

1.7 显示一幅图像 18

1.8 创建UI按钮并在场景间切换 20

1.9 在面板中组织图像并通过按钮调整面板深度 25

1.10 显示交互式UI滑块的数据值 29

1.11 基于UI Slider的图形化倒计时计数器 33

1.12 表示对象相对位置的显示雷达 36

1.13 利用Fungus开源对话系统创建UI 46

1.14 设置自定义鼠标指针图案 48

1.15 用于文本输入的Input Field 51

1.16 基于Toggle Groups的切换按钮和单选按钮 55

1.17 本章小结 58

第2章 道具栏UI 60

2.1 简介 60

2.2 创建简单的小型2D游戏—SpaceGirl 61

2.3 利用文本显示单一对象的拾取 65

2.4 利用图标显示单一对象的拾取道具 72

2.5 利用文本显示同一对象的多个拾取道具 75

2.6 利用多个图标显示同一对象的多个拾取道具 77

2.7 调整贴图尺寸并显示多个对象拾取道具图标 82

2.8 显示不同对象的多个拾取道具 84

2.9 使用Dictionary<>和枚举类型 89

2.10 利用UI Grid Layout Group生成多个图标显示 94

2.11 本章小结 109

第3章 2D动画 110

3.1 简介 110

3.2 水平方向上的精灵对象翻转 111

3.3 角色运动事件中的动画效果 112

3.4 创建3帧动画剪辑并生成连续动画 118

3.5 平台的跌落效果 120

3.6 利用精灵板序列创建动画剪辑 124

3.7 本章小结 127

第4章 创建贴图和材质 128

4.1 简介 128

4.1.1 创建并保存纹理贴图 129

4.1.2 概述 129

4.2 利用Standard Shader创建基本材质(Specular设置) 132

4.3 利用Specular和Metallic调整材质 140

4.4 向材质添加法线贴图 144

4.5 向材质添加透明度和自发射贴图 148

4.6 鼠标指针悬停时材质的高亮效果 153

4.7 向材质中添加细节贴图 156

4.8 材质透明度的淡出效果 160

4.9 在场景中播放视频 163

4.10 本章小结 166

第5章 相机 168

5.1 简介 168

5.2 生成画中画效果 169

5.3 在多部相机之间进行切换 174

5.4 根据屏幕内容生成纹理 178

5.5 相机的放大效果 182

5.6 显示小型地图 186

5.7 创建游戏中的监控相机 192

5.8 本章小结 196

第6章 光照效果 197

6.1 简介 197

6.2 使用光照和cookie纹理模拟阴天环境 200

6.3 向场景添加自定义反射贴图 205

6.4 生成激光瞄准器 208

6.5 利用反射探头实现周围物体的反射效果 214

6.6 利用Procedural Skybox和Directional Light设置环境 221

6.7 利用光照贴图和光探头照亮简单场景 224

6.8 本章小结 235

第7章 控制3D动画 236

7.1 简介 236

7.2 配置角色以及空闲动画 237

7.3 利用脚部运动和混合树移动角色 242

7.4 利用层和遮罩混合动画 249

7.5 将状态整合至子状态机中 255

7.6 通过脚本转换角色控制器 260

7.7 向动画角色中添加内容 265

7.8 通过动画事件投掷物体 268

7.9 向角色添加Ragdoll物理行为 272

7.10 角色的旋转和瞄准动作 277

7.11 本章小结 281



前言/序言

工作堆积如山,加班加点总也忙不完?

百度搜索N多遍,依然找不到确切答案?

大好时光,怎能全耗在日常文档、表格与PPT操作上?

别人工作很高效、很利索、很专业,我怎么不行?

嗨!

您是否羡慕他人早早做完工作,下班享受生活?

您是否注意到职场达人,大多都是高效能人士?

没错!

工作方法有讲究,提高效率有捷径:

一两个技巧,可节约半天时间;

一两个技巧,可解除一天烦恼;

一两个技巧,少走许多弯路;

一本易学书,菜鸟也能变高手;

一本实战书,让您职场中脱颖而出;

一本高效书,不必再加班加点、匀出时间分给其他爱好。

一、这是一本什么样的书

1.着重于解决日常疑难问题和提高工作效率:与市场上很多同类图书不同,本书并非单纯讲解工具使用,而是点对点地快速解决日常办公、电脑使用中的疑难和技巧,着重帮助提高工作效率的。

2.注意解决一类问题,让读者触类旁通:日常工作问题可能很多,各有不同,事事列举既繁杂也无必要,本书在选择问题时注意选择一类问题,给出思路、方法和应用扩展,方便读者触类旁通。

3.应用技巧详尽、丰富:本书选择了几百个应用技巧,足够满足日常办公、电脑维护方面的工作应用。

4.图解方式,一目了然:读图时代,大家都需要缓解压力,本书图解的方式可以让读者轻松学习,毫不费力。

二、这本书是写给谁看

1.想成为职场“白骨精”的小A:高效、干练,企事业单位的主力骨干,白领中的精英,高效办公是必需的!

2.想干点“更重要”的事的小B:日常办公耗费了不少时间,掌握点技巧,可节省2/3的时间,去干点个人发展的事更重要啊!

3.想获得领导认可的文秘小C:要想把工作及时、高效、保质保量做好,让领导满意,怎能没点办公绝活?

4.想早早下班逗儿子的小D:人生苦短,莫使金樽空对月,享受生活是小D的人生追求,一天的事情半天搞定,满足小D早早回家陪儿子的愿望。

5.不善于求人的小E:事事求人,给人的感觉好像很谦虚,但有时候也可能显得自己很笨,所以小E这类人,还是自己多学两招。

三、此书的创作团队是什么人

本系列图书的创作团队都是长期从事行政管理、HR管理、营销管理、市场分析、财务管理和教育/培训的工作者,以及微软办公软件专家。他们在电脑知识普及、行业办公中具有十多年的实践经验,出版的书籍广泛受到读者好评。而且本系列图书所有写作素材都是采用企业工作中使用的真实数据报表,这样编写的内容更能贴近读者使用及操作规范。

本书由赛贝尔资讯组织策划与编写,参与编写的人员有张发凌、吴祖珍、姜楠、陈媛、韦余靖、张万红、王莹莹、汪洋慧、彭志霞、黄乐乐、石汪洋、沈燕、章红、项春燕、韦聪等,在此对他们表示感谢!

尽管作者对书中的列举文件精益求精,但疏漏之处仍然在所难免。如果读者朋友在学习的过程中,遇到一些难题或是有一些好的建议,欢迎和我们直接通过QQ交流群和新浪微博在线交流。


《代码重构的艺术:写出健壮、可维护的Unity游戏》 引言 在瞬息万变的Unity游戏开发世界中,代码质量和可维护性是决定项目能否顺利推进、团队协作能否高效进行的关键因素。一个庞大、混乱的代码库不仅会拖慢开发进度,更容易滋生难以调试的Bug,并成为未来迭代和优化的巨大阻碍。本书并非旨在教授Unity基础知识或特定游戏类型的开发技巧,而是将目光聚焦于一个更为核心,却常常被新手忽视的领域——代码重构。我们将深入探讨如何系统性地审视、分析和改进现有代码,使其更清晰、更模块化、更易于理解和扩展。 第一章:代码重构的哲学与原则 本章将阐述代码重构的本质及其在软件工程中的地位。我们将从Why(为何要重构)和What(何为重构)出发,理解重构并非简单的“修修补补”,而是对代码进行结构性优化的过程。 重构的价值: 深入剖析重构为何对项目长期健康至关重要。这包括提高代码的可读性、降低Bug发生的概率、加速新功能的开发、提升团队成员之间的协作效率,以及为项目的未来演进奠定坚实基础。我们将通过案例分析,展示糟糕的代码如何成为项目瓶颈,而优雅的重构如何化解危机。 重构的定义与目标: 明确重构的核心目标是改变代码的内部结构,而不改变其外部行为。我们将区分重构与Bug修复、功能添加、性能优化等概念,强调重构的首要任务是提升代码质量。 重构的常见误区: 识别并 debunk 一些关于重构的普遍错误观念,例如“重构就是修改Bug”、“重构会浪费时间”、“代码已经能用了,没必要重构”。我们将一一驳斥这些观点,并解释它们可能带来的负面影响。 敏捷开发中的重构: 探讨重构在敏捷开发流程中的重要作用。理解持续重构如何与迭代开发、用户故事等概念协同工作,帮助团队快速响应变化,保持代码的健康度。 重构的“三定律”: 引入并解释“在添加新功能之前重构”、“在修改Bug之前重构”以及“在代码重复时重构”等指导原则,为重构实践提供行动指南。 第二章:理解代码中的“坏味道” 要进行有效的重构,首先需要能够识别代码中存在的“坏味道”(Code Smells)。这些“坏味道”是代码中可能存在问题的征兆,它们虽然不直接导致程序崩溃,却会极大地影响代码的可读性和可维护性。本章将系统地介绍各种常见的代码坏味道,并辅以Unity C代码的实际例子。 重复代码(Duplicated Code): 识别程序中不同地方出现的相同或非常相似的代码块。我们将探讨其危害,如修改时易出错、增加维护成本,并介绍提取方法(Extract Method)等重构手法来解决。 过长方法(Long Method): 分析冗长、功能过于集中的方法。我们将讨论其可读性差、难以理解、测试困难等问题,并讲解如何通过拆分方法(Extract Method)来将其分解为多个短小精悍、职责单一的小方法。 大数据类(Large Class): 识别包含过多字段、方法,职责过于泛化的类。我们将分析大数据类如何导致耦合过高、难以复用、测试困难,并介绍提取类(Extract Class)和提取子类(Extract Subclass)等重构技术。 过长的参数列表(Long Parameter List): 讨论方法参数过多带来的问题,如调用复杂、难以记忆、容易传错参数。我们将介绍参数对象(Introduce Parameter Object)和保持参数不变(Preserve Whole Object)等重构方法。 全局数据(Global Data): 分析全局变量和单例模式的滥用。我们将探讨其对代码可预测性、并发控制和测试的负面影响,并提供替代方案,如依赖注入(Dependency Injection)和消息传递。 霰弹枪修改(Shotgun Surgery): 描述一个简单的修改需要动到多处代码的现象。我们将分析其高耦合度的根源,并介绍移动方法(Move Method)和移动字段(Move Field)等手法来整合相关代码。 过度的耦合(Feature Envy): 识别某个类过度依赖其他类的成员。我们将讨论其破坏封装、增加依赖关系的问题,并讲解如何通过移动方法(Move Method)或提取类(Extract Class)来解决。 意大利面条代码(Spaghetti Code): 描述控制流程复杂、跳转混乱的代码。虽然C不像C++那样容易产生goto,但复杂的if-else嵌套、回调链也可能形成类似问题。我们将探讨如何通过引入状态模式、策略模式等设计模式来简化逻辑。 注释的滥用(Comments as a Deodorant): 分析当代码难以理解时,开发者倾向于通过添加大量注释来“掩盖”问题。我们将强调“代码即文档”的理念,以及通过重构来提升代码本身的可读性,从而减少对注释的依赖。 第三章:核心重构技法与实践 本章将深入介绍最常用、最有效的代码重构技法,并结合Unity开发场景,提供具体的代码示例和操作步骤。我们将把理论付诸实践,让读者掌握如何运用这些技法来改善代码质量。 提取方法(Extract Method): 详细讲解如何将一段代码提取为一个新的独立方法。我们将展示如何处理局部变量、返回值以及方法的命名,并强调其在消除过长方法、减少重复代码方面的作用。 提取类(Extract Class): 介绍如何将一个类的部分职责拆分到新的类中。我们将讨论如何选择合适的职责边界,如何处理字段和方法的迁移,以及其在解决大数据类问题上的效果。 移动方法/字段(Move Method/Field): 讲解如何将方法或字段从一个类移动到另一个更合适的类。我们将分析移动的动因(如Feature Envy),并演示如何安全地进行迁移,以降低耦合度。 内联方法/字段(Inline Method/Field): 讲解与“提取”相反的操作,即用方法体替换方法调用,或直接使用字段值替换字段访问。我们将讨论其适用场景,如消除过小的、不必要的封装。 替换继承为组合(Replace Inheritance with Composition): 介绍如何用组合模式替代继承关系,以增加代码的灵活性和可复用性。我们将分析继承的局限性,并演示如何通过组合来构建更具弹性的类结构。 提取超类/接口(Extract Superclass/Interface): 讲解如何从现有类中提取共同的超类或接口,以实现代码的抽象和复用。我们将讨论何时使用超类,何时使用接口,以及它们在多态和解耦中的作用。 引入参数对象(Introduce Parameter Object): 介绍如何将一组相关的参数组合成一个对象,以简化方法签名。我们将分析参数过多的问题,并演示如何通过引入参数对象来提高代码的可读性和易用性。 拆分循环(Split Loop): 讲解如何将一个包含多个独立操作的循环拆分成多个循环。我们将分析拆分循环的好处,如提高可读性、便于并行化等。 移除死代码(Remove Dead Code): 介绍如何识别并删除不再被使用的代码,包括未被调用的方法、未使用的变量和类。我们将讨论死代码对项目维护的负面影响。 重命名(Rename): 强调清晰、准确的命名是代码可读性的基础。我们将介绍如何安全地重命名变量、方法、类,以提高代码的自解释性。 第四章:Unity特定场景下的重构策略 本章将聚焦于Unity游戏开发中的特有场景,探讨如何将通用重构技法应用于Unity的脚本、组件、资源管理等方面,以提升游戏项目的代码质量。 MonoBehaviour的重构: 拆分过大的MonoBehaviour: 许多Unity开发者倾向于将所有逻辑堆积在一个MonoBehaviour脚本中。我们将介绍如何将复杂的MonoBehaviour拆分成多个职责单一的小脚本,并通过组件间通信(如SendMessage、GetComponent、事件回调)来协调工作。 管理生命周期方法: 规范`Awake`、`Start`、`Update`、`FixedUpdate`等生命周期方法的职责,避免它们变得过于冗长和复杂。 处理组件依赖: 使用[SerializeField]、GetComponent、GetComponentInChildren、GetComponentInParent等方法来安全地获取组件引用,并讨论如何通过Prefabs和ScriptableObjects来管理组件的初始化和依赖关系。 游戏状态管理: 有限状态机(FSM)的应用: 介绍如何使用状态机模式来管理角色、AI、UI等复杂的状态逻辑,避免庞大的if-else判断。 事件驱动的设计: 强调使用事件系统(UnityEvent、C事件)来解耦组件之间的通信,减少直接依赖,提高系统的灵活性。 数据驱动开发: ScriptableObjects的重构: 探讨如何将配置数据、游戏规则等从硬编码中分离出来,存储在ScriptableObjects中,以实现数据的动态调整和快速迭代。 JSON/XML等数据格式的应用: 介绍如何利用外部数据文件来管理游戏配置,以及如何编写相应的解析器来读取和使用数据。 资源管理与性能优化: 代码与资源的解耦: 讨论如何通过抽象层来管理资源的加载和卸载,避免脚本直接依赖于具体的资源路径。 对象池(Object Pooling)的重构: 讲解如何实现高效的对象池,以复用 GameObject,减少实例化和销毁的开销。 代码模块化与插件化: 构建可插拔的系统: 介绍如何设计模块化的代码,使其易于移除、替换或新增功能,为多人协作和第三方插件的集成打下基础。 命名空间(Namespace)的使用: 强调使用命名空间来组织代码,避免命名冲突,提高代码的可读性和管理性。 第五章:重构的流程、工具与团队协作 掌握重构技法是第一步,更重要的是如何将重构融入日常开发流程,并与其他团队成员协同工作。本章将为你提供一套完整的重构实践指南。 重构的五步法: 1. 识别坏味道。 2. 选择合适的重构技法。 3. 编写单元测试(如果已有)。 4. 执行重构。 5. 运行测试,验证行为。 重构的自动化工具: IDE的支持: 介绍Visual Studio/Rider等IDE中内置的重构工具(如Extract Method, Rename),以及如何高效地使用它们。 静态代码分析工具: 探讨SonarLint、Roslyn Analyzers等工具如何帮助发现代码中的潜在问题和坏味道。 重构的测试策略: 单元测试的重要性: 强调编写单元测试是安全重构的基石。我们将介绍如何在Unity中编写和运行单元测试。 测试驱动重构(TDR): 介绍TDR的理念,即先编写测试,再进行重构,确保重构不改变现有功能。 集成测试与验收测试: 讨论在重构过程中如何利用更高级别的测试来保障整体功能的正确性。 团队协作中的重构: 代码审查(Code Review): 强调代码审查在发现坏味道、推广重构实践中的作用。 建立重构文化: 讨论如何鼓励团队成员积极参与重构,并将其视为常态。 处理遗留代码: 提供处理大型、混乱的遗留代码库的策略,如“摇篮曲”重构法。 何时不应重构: 识别那些可能不适合立即进行重构的场景,例如:项目即将上线、关键Bug尚未修复、重构风险过高且收益不明等。 结语 代码重构并非一蹴而就的魔法,而是一个持续不断、需要耐心和技巧的工程。本书提供的知识和技法,旨在为你打开一扇通往更高质量代码的大门。通过系统地学习和实践,你将能够写出更清晰、更健壮、更易于维护的Unity游戏代码,从而在激烈的市场竞争中保持优势,享受开发带来的真正乐趣。愿本书成为你成为一名更优秀的游戏开发者旅程中的得力助手。

用户评价

评分

评价五: 这本书《Unity5.x实战开发指南》给我最大的感受就是“实用”。作为一名对游戏开发充满热情的业余爱好者,我之前尝试过很多网上的教程,但总是感觉学习到的知识比较零散,很难形成完整的开发体系。这本书就像是把那些零散的知识点串联起来,并且用大量实际的项目案例来加深理解。我特别看重它在“游戏逻辑”方面的讲解,比如如何实现AI的行为、如何设计关卡、如何处理游戏状态等等。我希望书中能够提供一些通用的算法和设计模式,让我在开发自己的游戏时能够有章可循。此外,我非常关注书中关于“性能优化”的内容,因为我知道一个流畅的游戏体验对于玩家来说至关重要。我希望书中能够提供一些实用的技巧,比如如何减少Draw Call、如何优化内存使用、如何编写高效的脚本等等。我还在学习书中关于“资源管理”的部分,希望能学会如何更有效地组织和导入项目资源,避免出现不必要的错误。总的来说,这本书是一本非常值得推荐的Unity开发入门和进阶书籍。

评分

评价三: 拿到《Unity5.x实战开发指南》之后,我迫不及待地翻阅起来,希望能从中汲取开发游戏所需的养分。坦白说,我一直对游戏开发抱有浓厚的兴趣,但苦于没有系统性的入门教程,每次在网上看到那些炫酷的游戏,都只能望洋兴叹。这本书的出现,恰好填补了我的这一空白。我希望这本书能够深入浅出地讲解Unity 5.x版本的核心功能,比如它的物理引擎、渲染管线、动画系统以及粒子系统等。我特别关注那些能够提升游戏表现力的部分,例如如何有效地使用光照和阴影,如何创建逼真的材质和纹理,以及如何通过后期处理来美化画面。另外,对于开发者来说,性能优化无疑是一个绕不开的话题。我非常期待书中能提供一些关于如何检测和解决性能瓶颈的技巧,比如如何合理地管理内存、如何优化Draw Call,以及如何使用Profiler工具来分析游戏的性能。如果书中还能涉及一些网络同步、多人联机方面的内容,那就更棒了,虽然我知道这可能比较复杂,但作为一本“实战指南”,我觉得有必要有所涉及。

评分

评价二: 最近沉迷于《Unity5.x实战开发指南》这本书,简直停不下来!作为一名业余的Unity爱好者,我之前尝试过很多零散的学习资料,但总是觉得缺了点什么。这本书简直就像是我寻找已久的“宝藏”。它不仅仅是简单地罗列知识点,而是真正地引导你一步步地进入Unity的开发世界。我最欣赏的是它的“实战”二字,书中穿插了大量的实际项目案例,从简单的2D小游戏到稍微复杂一点的3D场景,让我能够清晰地看到每一个知识点是如何在实际项目中应用的。比如,当我还在为如何实现一个流畅的角色控制器而头疼时,书中就提供了一个详细的步骤讲解,包括如何使用CharacterController组件、如何编写移动和跳跃的脚本,甚至还提到了如何添加动画和音效,让角色活灵活)}, ext{起来。这种“手把手”的教学方式,让我受益匪浅。而且,书中对一些容易出错的地方也做了详细的提示和解释,避免了我走很多弯路。我特别喜欢的是书中关于UI系统讲解的部分,从Canvas的创建到各种UI元素的添加和布局,再到事件的绑定,都讲解得非常透彻,让我终于能够制作出美观且实用的游戏界面了。

评分

评价一: 说实话,我拿到这本《Unity5.x实战开发指南》的时候,心情是有点复杂的。一方面,我期待着它能真正地把我从一个菜鸟变成一个能够独立开发游戏的人,毕竟Unity的强大和普及程度摆在那里,掌握它就等于打开了通往游戏开发世界的大门。我一直在网上找各种教程,但很多都零散且不成体系,遇到问题也只能大海捞针。所以,一本“实战开发指南”听起来就像是我的救星,我希望它能系统地讲解Unity的方方面面,从基础的界面操作、常用组件的使用,到更深层次的脚本编写、场景搭建、资源管理,甚至是性能优化和项目打包发布。我尤其期待它能包含一些实际的小项目案例,让我能够边学边做,亲手实现一些有趣的功能,比如角色移动、碰撞检测、UI交互、简单的AI行为等等。毕竟,光看理论是很难掌握的,只有动手实践,才能真正理解代码的逻辑和引擎的工作原理。如果书中能够提供配套的代码资源,那就更完美了,这样我就可以直接对照学习,遇到错误也能快速找到原因。我希望这本书的语言风格不要太枯燥,能够用通俗易懂的方式解释那些听起来很高大上的概念,让像我这样的新手也能轻松理解。

评分

评价四: 《Unity5.x实战开发指南》这本书,真的是为我这样的初学者量身定做的。我之前对Unity的了解仅限于知道它是一款强大的游戏开发引擎,但具体怎么用,怎么写代码,完全是一头雾水。这本书就如同一盏明灯,指引我走进了Unity的世界。我最喜欢的一点是,它并没有一开始就抛出大量的理论知识,而是从最基础的界面布局和常用工具讲起,让我能够很快地熟悉Unity编辑器。然后,它循序渐进地引入脚本编程的概念,通过一个个简单易懂的小例子,让我逐渐理解C在Unity中的应用。我尤其喜欢书中关于“场景搭建”的部分,不仅仅是简单的物体摆放,还包括了如何创建地形、如何放置摄像机、如何添加音效,甚至是如何实现昼夜更替效果。这些细节的处理,让整个游戏世界变得更加生动。而且,书中关于“角色控制”的讲解,让我第一次能够成功地操控一个游戏角色在屏幕上自由移动,那种成就感无与伦比。我还在学习书中关于“UI系统”的部分,已经能制作出简单的按钮和文本框了,非常实用。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.teaonline.club All Rights Reserved. 图书大百科 版权所有