2021-06-11

一、 项目介绍
(一)项目背景和意义
此项目以unity为背景,融入了部分蒙古族的特色,马的建模也以比较贴近蒙古马,其中一匹还身披战甲,像一只真正的战马一样,随时准备冲锋。
此项目中在马上射箭的功能能够使用户真实的体验在马上骑射的快感。
(二)项目概述
在unity中利用terrain组件创建一个地形,自己按照喜好绘制地形,其中必不可少的有人物和马,人物走到马的身边可以按下F键骑马,骑上马后会解锁武器,其中武器包括斧头、弓箭、手枪。骑上马后默认状态为慢走,按2后会切换为小跑状态,按下3后会切换为快跑状态。按空格实现跳跃。是一个十分自由的游戏。另外,游戏中还隐藏这一个小型的世外桃源等待着你的发现。
(三)项目周期
5月25日到6月6日
(四)项目目标
实现骑射的功能,并且能够让箭与靶子发生碰撞,撞之后实现靶子消失,分数增加,而且有着一定的自由的,能够让用户在游戏中在体验骑射的闲暇放松自我,忘记不愉快。

二、项目实施计划
阶段 时间 工作 投入人员
第一阶段准备期 5月25日  指导制作 何飞宇
 确定素材 刘政熔
 确定项目设计思路 武客仿
第二阶段启动期 5月26日- 6月5日  指导制作 何飞宇
制作操作文档  刘政熔
武客仿
 实现项目所有功能 刘政熔
武客仿
第三阶段测试期 6月6日  项目测试 刘政熔
武客仿

三, 项目实施步骤

单元一 游戏场景的导入与搭建
1、 任务分析
如何使用terrain控件实现绘制3D地形以及材质球的制作
2、 任务要求
绘制一个类似沙漠的场景,其中包括一个湖以及一个靶场和一个练马场;
3、技术难点
Terrain控件的使用会十分损耗电脑,导致电脑在绘制地形的过程中十分缓慢,所以一定要有耐心;学习如何使用terrain控件实现绘制3D地形以及材质球的制作;
4、操作流程
(1)场景导入:
通过网络链接下载一些马和人物的模型及动画导入其中。
(2)场景搭建:绘制地形
1、我们首先创建一个新的Scene场景,然后在菜单栏中选中Assets菜单,其中Import Package就是导入资源选项,选中它,再单击后面选项中的Environment即可,具体步骤如图1.1:
图1.1
需要注意的是:Environment属于Unity所提供的标准资源包,需要用户在官网自行下载。
2、在Scene场景中创建一个Terrain游戏对象,具体步骤如图1.2:

图1.2
3、设置地形的分辨率。在Terrain的Inspector视图中单击设置按钮,找到Resolution,然后就可以在Resolution下设置地形的宽度、长度、高度。具体操作如图1.3:
图1.3
4、在Terrain的Inspector视图中,单击Paint Height(绘制高度)按钮,然后在Brushes列表中选择大圆形笔刷样式,再将Setting下的Brush Size(笔刷大小)设置为100,Height设置为5,同时单击Flatten,此时整个地形就会向上抬高5个单位,如图1.4所示:

图1.4
需要注意,Settings下的Height值也是抬高地形,也就是加厚地形,不过地形厚度不可见,我们看到的只是地形表面。然后我们就可以将鼠标移动到Scene视图中的地形上,此时地形上会出现一个蓝色的圆形区域,按住鼠标左键并拖动即可抬高地形高度,如图1.5:
图1.5
重复上一步骤,就可以将整个地形的高度绘制完成,和用Settings下Height值达到相同的效果,同样的,绘制完成后我们依然看不到地形的厚度。而将地形抬高的目的是为了让地形往下刷深度。
5、降低地形高度(往下刷深度),用来制作湖泊。在Terrain的Inspector视图中单击Raise/Lower Terrain按钮(就是第一个按钮),选择Brushes下的大圆形笔刷样式,然后将Settings下的Brush Size设置为100,最后在Scene视图中按住Shift键单击,即可降低地形高度,如图1.6:

图1.6

6、绘制山脉。和上面降低地形高度差不多(只是操作时不需要按住Shift键):单击Raise/Lower Terrain按钮,选择不同的笔刷样式,设置不同的Brush Size大小,直接在Scene视图中单击鼠标左键或者按住鼠标左键拖动,即可绘制不同的山脉和细节,如图1.7:

图1.7
7、平滑地形高度。单击Smooth Height按钮(第三个按钮),选择笔刷样式,然后在Scene视图中按住鼠标左键拖动可以柔化地形的高度差,使地形的起伏更加平滑,如图1.8:
图1.8
8、绘制地形的首层纹理。单击Terrain下的Paint Texture按钮,然后单击Edit Textures按钮,选择Add Texture,在弹出的Add Terrain Texture对话框中单击Albedo(RBG)中的Texture2D下的Select按钮,在弹出的Select Texture
2D对话框中选择GrassrockyAledo,最后单击Add Terrain对话框下的Add按钮,如图1.9:
图1.9
需要注意的是,添加的纹理是我们开始导入的Environment中带有的。
9、绘制其它纹理。按照上一步骤,继续添加一个名为CliffAlbedoSpecular的纹理,然后在Texture下选择该纹理,在地形山脉上绘制该纹理,如图2.0:
图2.0

(三)射击场制作
如图所示,先新建一个Cube;
之后在网上搜索一个靶子的贴图;按图下操作设置贴图格式;

更改好格式后在project面板右键单击新建一个材质球;

新建好材质球后,将靶子的贴图拖放到与图中相对应的位置;

最后将制作好的靶子拖动到Prefab文件夹下做为一个预制体,方便后期使用。
(四)练马场制作
在网上搜索一些栏杆的模型导入到场景中直接,按照自己的喜好搭建场景。
单元二 人物的移动和UI搭建
1、任务分析
通过代码实现人物移动、移动状态的切换、召唤武器、切换武器以及箭射到靶子上靶子消失,UI更新等分等功能
2、任务要求
实现上述功能且无BUG,使游戏能够正常运行;
3、技术难点
一定注意unity工程中的标签必须与碰撞检测脚本中的标签名一致,否则代码即不会执行,也不会报错,找起错误来十分困难。
4、操作流程
单元重点:本单元重点在于如何判断得分的实现。
得分需要通过箭碰撞到靶子实现碰撞检测,从而触发碰撞检测,最终实现加分,加分之后通过UI显示到事先设置好的位置。
(1)人物代码
最简单的人物移动

3.1.1 移动状态的切换部分代码

(2) 召唤武器及切换武器
新建一个wuqi脚本,在脚本内编写以下代码

回到unity中,将武器与物体逐个对应拖动到脚本上;

(三)得分实现
首先,为所有的靶子添加碰撞器(box Collider),并且将靶子的标签改为“bazi”,操作如下图所示;
t 新建Score脚本,并且编写以下代码;

新建jianfen脚本,并且编写以下代码;

(四)UI搭建
【单元重点】
在本单元中,将讲解如何搭建UI:
可以看到,本项目的UI布局大多为Text组件,所以本单元主要讲解UI控件中的Text控件。

按照上图搭建UI,操作过程如下图;

在红圈内编辑文本,其他文字操作步骤相同。
单元三 游戏的发布与打包
1、任务分析
本环节主要完成项目的发布和打包;
2、任务要求
将项目打包发布为以下4个版本
1、独立平台(Windows、Mac OSX和Linux系统);
2、WebGL;
3、Android;
4、iOS;
3、技术难点
JDK与SDK的配置;需要到官网下载最新版本的JDK与SDK,以保证能够顺利打包项目,防止中途报错。
在本单元中,将了解如何为下列最常见的平台创建发布设置:

  1. 独立平台(Windows、Mac OSX和Linux系统)
  2. WebGL
  3. Android
  4. iOS
    由于提交到商店(如苹果APP Store和谷歌的Google Play)这一过程是相当复杂且更新频繁,这里提供了链接的教程,涵盖了商店提交的详细过程。
    本单元假定用户已在下载助手中下载了上述平台。如果没有,请下载最新版本的Unity,并在安装时选择这些平台,如图3-0所示。
    4、操作流程
    制作完成一个游戏本身就值得称赞,但把它分享出来让人们去玩,并且得到极好的反馈是另一种成就。Unity目前支持24个平台,而且支持的平台列表还在增加。这样仅需要细微调整,就能将一个游戏导出到多个平台上。

(1)
在Unity中启动项目,并通过测试游戏确保一切运行正常。这是第1、2单元完成的项目,这里将需要使用到Textures文件夹中的两个图片——图标和横幅,如图3-1、图3-2所示。

图3-1 Icoin图标 图3-2 Runestrife-Banner横幅
要确保该图标用于发布,在主菜单中选择“File→Build Settings…”菜单命令,然后单击 “Player Settings…”按钮用以在检视视图中打开Player Settings组件,如图3-3所示。这里最好记住如何打开这个组件,因为读者会在此章节中多次用到它。

图3-3 Player Settings…按钮
单击Default Icon旁的“Select”按钮,然后在弹出的窗口列表中选择“Icon”图标图片。这将确保此图标可跨平台使用。接下来,展开Splash Image模块,单击Application Config Dialog旁的“Select”按钮,在弹出的窗口列表中选择“Runestrife-Banner”横幅图片,如图3-4所示。

图3-4 添加横幅
还要设置公司名称和产品名称,如图3-5所示。这可以是用户的真实姓名、假名或用户公司的名称。目前不要改变该产品名称。

图3-5 设置公司名称和产品名称
现在讲解每个平台的具体发布设置,第一个是独立平台。
(2)
Windows、Mac OSX和Linux被认为是独立的平台。发布生成包含可执行文件和可轻松共享的数据文件夹。打开Player Settings组件并展开Resolution and Presentation模块,如图3-6所示。

图3-6 Resolution and Presentation模块
这些都是在创建独立平台导出时的一些最重要的设置。大多数设置为默认值就可以了。常见设置为:
Default Is Full Screen:游戏启动时默认启用全屏模式。
Run In Background:当游戏最小化时,保持后台运行状态。对于网络游戏来说这特别给力,因为最小化很有可能会掉线。
Display Resolution Dialog:当启用时,在游戏开始时会弹出分辨率配置的对话框。它也可以设置为默认情况下隐藏,这意味着对话框将只在游戏启动时,当玩家按住Alt键(或Option键)时显示。如图3-7所示为分辨率配置对话框。

图3-7 分辨率配置对话框
Supported Aspect Ratios:这些复选框决定了在启动时,如果玩家的显示器支持,在分辨率对话框中可以选择采用哪个纵横比。除16:9之外,取消选中所有复选框。此处“符文冲突”只支持这一纵横比,因为任何较之窄屏将导致一些塔槽被屏幕挡住,如图3-8所示。用户可以通过更改游戏视图的控制栏来进行尝试。

图3-8 符文冲突纵横比
现在所有准备已完成,可以开始创建一些发布设置了。在主菜单选择“File→Build Settings…”菜单命令,打开Build Settings窗口,在这里用户可以通过下拉菜单选择创建什么样的目标平台,如图3-9所示。

图3-9 选择平台
用户也可以选择Architecture,这意味着可以选择32位、64位或两者兼而有之(对Mac OSX和Linux来说)。从2006年左右,几乎所有计算机都有64位处理器,因此始终可以安全地选择x86来构建。如果用户想更安全,这里可以选择建立32位架构。在Mac OSX和Linux的情况下,通常选择通用体系架构,因为它兼容两者所有架构,如图3-10所示。

图3-10 各平台架构支持
在各自的下拉菜中选择Windows和 x86_64,然后单击右下角的“Build”按钮。选择创建一个新文件夹来存储生成的发布包,并命名为Runestrife-Windows,选择该文件夹的位置,然后单击“Save”按钮。现在,Unity 将把这个项目编译成一个版本。编译所需的时间取决于项目的大小,“符文冲突”项目不应超过一分钟,如图3-11所示。

图3-11 编译项目
完成构建后,包含发布的文件夹将被打开。如果用户是Windows系统,双击exe文件尝试打开游戏,如图3-12所示。

图3-12 Runestrife-Windows发布包
现在遵循同样的过程来创建Mac OSX和Linux版本。为发布包创建Runestrife-MacOSX和Runestrife-Linux文件夹。如果用户使用的是这些平台中的任何一个,请尝试打开生成的文件,以查看一切是否正常。
现在,用户可以将制作的版本上传到百度云、微云等,分享给朋友和家人体验。下一小节:创建一个WebGL发布包。
(3)
WebGL可以把游戏直接发布成一个网页——不需要安装插件!此构建选项最初在Unity 5.0版本中引入,但由于几个限制和缺陷,在当时几乎无法使用。它的包体也很大,所以人们不得不等待很长一段时间来加载游戏页面。自Unity 5.4版本起,WebGL现在已是一个受人欢迎的平台。大多数限制已被删除,并且现在包体已被压缩以避免大量加载。
① 要开始使用WebGL,打开Build Settings窗口,选择“WebGL”,然后单击“Switch Platform”按钮,如图3-13所示。

图3-13 WebGL 设置 3-14 WebGL的Player Settings组件
编辑器现在将需要一段时间来重新编译所选平台的所有内容。完成后,打开Player Settings组件,如图3-14所示。
请注意,与独立平台设置看起来完全不同。以下是Resolution And Presentation中最重要的设置:
Default Screen Width & Height:这些控件控制WebGL画布在网页上的尺寸。确保这些是用户游戏支持的纵横比。默认值为960×600,它的纵横比为16:10。把它修改成960×540即16:9。
Run In Background:与独立平台一样,这使得游戏在后台可以继续运行。
WebGL Template:所有项目的WebGL模板都会显示在这里。默认情况下,这些只是Unity提供的示例模板。用户可以通过在项目中创建一个WebGLTemplates文件夹并将必要的HTML、JS和CSS文件放在其中来添加自己的文档。有关详细信息,请参阅WebGL模板的统一文档:https://docs.unity3d.com/Manual/webgl-templates.html。
现在打开Publishing Settings模块,如图3-15所示,在进行WebGL构建生成时,有3个非常重要的设置:

图3-15 WebGL的Publishing Settings模块
WebGL memory size(WebGL内存大小)
这是WebGL运行时可用的MB内存量。它是WebGL发展的巨大隐患。WebGL需要事先知道在加载游戏时需要预留多少内存,而不能够像其他平台那样动态地增加堆的大小。如果此值太低,将会出现内存不足的错误。如果此值太高,一些浏览器和平台将不会有足够的内存来支持,导致加载游戏失败或崩溃。这确实是个棘手的问题。建议用户玩这个游戏,并用压力测试最糟糕的方案,看看它实际使用了多少内存。然后在此值上给它增加一点额外的开销。有关详细信息,请参阅:https://docs.unity3d.com/Manual/webgl-memory.html。这里就设置256 MB的内存空间,“符文冲突”不需要太多的内存。
Enable exceptions(启用例外)
这个设置有3个选项:
None:最好的性能和最小文件大小。当发生异常时,游戏会报告错误并停止运行。
Explicitly Thrown Exceptions Only:适宜的性能和文件大小。只有throw语句异常时才被捕获,并导致finally调用块生效。
Full:最差的性能和文件大小。引发每个异常,甚至是空引用。此项仅用于捕获和跟踪WebGL的BUG,此设置将会降低性能并增加浏览器的内存使用量。
Data caching(数据缓存)
启用数据缓存后,玩家只需在第一次加载时下载项目的内容。随后的访问将从IndexedDB中加载数据。如果游戏已更新,缓存将被清除,玩家必须执行完整的下载。在“符文冲突”设置中选中该复选框。
② WebGL参数设置结束。是时候打包生成了!打开Build Settings窗口,这次单击“Build And Run”按钮。当用户使用“Build And Run”时,Unity会创建一个小型本地web服务器,如果用户简单打包,则可以在web浏览器中打开生成的index.html文件。如果用户使用谷歌浏览器,需要在浏览器中开启“允许运行→不安全的内容”的开关,然后打开index.html文件。创建另一个名为Runestrife-WebGL的文件夹,并在其中创建打包文件。WebGL的编译时间很长,请耐心等待,当编译完成后,它会自动打开一个网页指向本地主机与游戏的HTML加载页面,如图3-16所示。

图3-16 游戏的HTML加载页面
如果由于某种原因无法正确加载,请尝试重新启动浏览器,或尝试使用其他浏览器。火狐浏览器目前对WebGL有最好的支持,但其他浏览器也应该能正常工作。查看打包生成的文件夹,如图3-17所示:

3-17 打包生成的文件
index.html文件是游戏网页,Release文件夹包含所有游戏数据,TemplateData包含其他文件,如JSS和CSS。用户可以上传游戏到Game Jolt网站或自己的web服务器上与他人分享。下面介绍如何将游戏发布到Android客户端上!
(4)
① 与以前的平台不同,Android打包有更加繁琐的步骤。为Android创建包体,需要以下前提:
获取并安装最新的Android SDK(可选,Android Studio):
https://developer.android.com/studio/index.html
注册一个谷歌商店出版商账户。获取说明页面:
https://developer.android.com/distribute/googleplay/start.html
这些是可选的步骤,但此处强烈推荐它们,以便用户可以在手机上测试游戏:
在Android设备上启用USB模式调试。
将设备连接到SDK。如果使用的是Windows系统,则可能需要其他驱动程序。
重启Unity,它应该自动检测Android SDK。用户可以通过打开Unity Preferences窗口,然后打开External Tools选项卡来检查这一点。SDK路径应填写如图3-18所示。

图3-18 SDK路径
如果不是,用户可以单击“Browse”按钮手动选择SDK文件夹。
现在打开Build Settings窗口,选择Android平台并单击“Switch Platform”按钮,如图3-19所示。

图3-19 选择Android平台发布
② 现在,编辑器将重新导入所有内容以优化Android。再次打开Build Settings窗口,然后单击“Player Settings…”按钮, 在检视视图中打开Player Settings组件。打开Resolution and Presentation模块,如图3-20所示。

图3-20 Android的Resolution and Presentation模块 图3-21 锁眼窥视的感觉
Default Orientation:默认情况下,设置的是自动旋转。这意味着无论是场景或人物模型,将始终以设备的方向和大小在游戏中呈现。这通常不是游戏开发者所要的。大多数手机游戏开发商设计游戏和UI界面面向一个特定的方向,“符文冲突”游戏也一样。它只会在正确的场景中呈现——除非用户希望尝试通过一个锁眼窥视的感觉,如图3-21所示。确保此项目的将默认方向设置为Landscape Left。这样就修复了方向,使游戏画面始终保持左横向(home键右边)显示。
Use 32-bit Display Buffer(32位显示缓冲器):使用32位颜色替代16位。当此项关闭,用户可能会看到色彩渐变条带显示或者纹理未透明。保持勾选,除非游戏真的需要节省内存。
Show Loading Indicator(显示加载条):在屏幕角落显示Android的本地加载条。总是将此设置为Don’t Show。因为加载条看起来很不专业且没有任何价值。
③ Identification,这些设置对于发布和更新Android游戏非常重要,如图3-22所示:

图3-22 Identification
Bundle Identifier(包标识符):用于唯一标识游戏的字符串。每个游戏都需要设置一次,然后不要再更换。否则,它将被认为是不同的游戏。此字符串的格式为:com. [DEVELOPER].[GAME NAME]。
Version(版本):游戏的版本,它可以是1.0、2.4.0.1或者其他形式。
Bundle Version Code(包版本代码):每次建立游戏的一个新版本,必须更新这个数字用来发布标识此版本,这个数字必须是较高的数字。
Minimum API Level:Android游戏运行的最低版本。这里需要下载好选择的版本的SDK版本。大多数设备都有4.4或更高版本,因此最好将其保留在4.4版本。如果需要从Android系统中要求更高版本的特定功能,请务必调整此值。
④ Publishing Settings模块,如图3-23所示。

图3-23 Publishing Settings模块
这里是选择或创建密钥库的地方。密钥库用于验证应用程序和用户的身份。这是证明用户是开发者的证书。如果用户已经创建了一个密钥,只需单击“Browse Keystore”按钮,查找密钥库文件,然后输入密码。
现在选择或创建读者想要使用的别名,输入它的密码,就可以了。如果还没有密钥库,勾选“Create new Keystore”复选框,单击“Browse Keystore”按钮,然后选择保存密钥库的位置。现在为密钥库创建一个密码、别名及其密码。
⑤ 现在已经完成了Android打包准备。打开Build Settings窗口,然后单击“Build And Run”按钮,如果现在有一个可以连接的Android 设备,则可以立即测试该包体。或者单击“Build”按钮来创建APK(Android应用程序包)。无论采用哪种方式,用户都必须选择一个名称和位置来放置打包文件APK。
一旦用户选择了Build And Run,编辑器将建立和编译所有的内容到一个Android包,并复制和安装它。一定要记住APK存放的位置,因为用户将很快需要它。现在用户创建的Unity游戏可以在谷歌商店及国内各大第三方应用市场上发布了。要了解更多有关提交应用程序到谷歌商店的过程,请查阅谷歌开发文档。
(5)
从某些方面来说,在iOS应用程序商店发布应用程序是一个简单的过程,但实际的应用程序提交过程可能是非常复杂的。这个过程需要用户有一个Mac、最新版本的Xcode(编写此教程时为版本8)和一个苹果公司开发者账户。开发者账户每年要花费99美元,但是用户很快就会赚到几百万,如果开发者有好的创意的话。报名参加苹果公司开发者计划,跳转到https://developer.apple.com/programs/。
① 打开Build Settings窗口,选择iOS平台并单击“Switch Platform”按钮,如图3-24所示。

图3-24 选择iOS平台发布
切换到iOS平台的一个好处是,游戏视图将更新所有的设备大小。这使得在不推送设备的情况下,在设备屏幕大小上进行测试变得很容易,如图3-25所示。

图3-25 游戏视图匹配iOS所有设备大小 图3-26 选择公司名称和产品名称
② 打开Player Settings组件,并确保选中了iOS。首先必须选择公司名称和产品名称,如图3-26所示。产品名称是游戏在调用设备上的名称。
此时,用户可以更改特定的iOS设置。以下是说明:
Resolution and Presentation(分辨率和描述):允许用户设置启动方式,无论是状态栏显示,还是全屏支持。
Icon(图标):应用程序中使用的图标。Unity根据默认图标填充图标,但可以自定义某些设备的图标。
Splash Image(开机画面):它是用户在游戏启动时看到的第一个图像。理想情况下,这应该是游戏中的第一个屏幕的静态截图。
Debugging and Crash Reporting(调试和崩溃报告):允许用户打开分析并确定应用程序在遇到未经处理的异常时的行为方式。
Other Settings(其他设置):配置生成打包设置和特定设备设置。
展开Resolution and Presentation,并将Default Orientation设置为Auto Rotation。用户会看到一系列旋转方式。取消勾选“Portrait”和“Portrait Upside Down”复选框。
现在,在iOS中定制游戏启动画面。在iOS中,苹果公司建议用户使用第一个游戏截屏图。当玩家单击游戏启动图标,iOS会显示这个截图,虽然它仍然在加载,但这给人感觉应用程序已经启动了。默认情况下,Unity将提供一个Made with Unity的启动画面。如果用户使用的是专业版的Unity Pro,这里可以禁用这个启动画面。现在,让它保持启用状态,以便可以看到它的外观。
注意:在Unity Pro版本中,用户可以自定义Made with Unity的启动画面。
③ 最后,展开Other Settings部分,并更改Bundle Indentifier以匹配公司名称。这是非常重要的,因为每个应用程序都必须有一个唯一的标识符。此字符串的格式为:com.[DEVELOPER].[GAME NAME]。当在iTunes连接配置应用程序时,需要使用此标识符。
④ 现在开始打包。打开“File→Build Settings”菜单命令并单击“Build”按钮。系统将提示用户保存生成打包的位置。选择桌面,命名为Runestrife,并单击“Save”按钮。Unity将需要一些时间来生成Xcode项目,其中包含游戏的iOS SDK,剩下要做的就是把它提交给应用程序商店。
Xcode项目包含在设备上构建和测试游戏所需的一切资源,并将游戏发布到应用程序商店。苹果公司将允许用户在不需要付费的开发人员账户的设备上测试该游戏,但前提是必须有一个付费的开发人员账户才能提交给应用程序商店。
要了解有关创建开发人员账户、在设备上运行应用程序以及将游戏提交给应用程序商店的更多信息,请查看苹果的开发者文档——How to Submit An App to Apple: From No Account to App Store(如何向Apple提交应用程序:从没有账户到应用程序商店)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值