Unity3d 同步加载 Assetbundle 方法 AssetBundle.CreateFromFile

Unity3d 同步加载 Assetbundle 方法 AssetBundle CreateFromFile 阅读详情

目录(?)[+]

今天在群里问朋友有没有 同步加载 Assetbundle 的方法,同事给我指点 Unity3d 不知道在哪一个版本新增了一个 AssetBundle.CreateFromFile 的接口,这个接口是同步读取Assetbundle的。于是到帮助文档查询相关资料。

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. http://docs.unity3d.com/ScriptReference/AssetBundle.CreateFromFile.html  
文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. AssetBundle.CreateFromFile  
  2. public static AssetBundle CreateFromFile(string path);  
  3. Parameters  
  4. path    Path of the file on disk  
  5.   
  6. See Also: WWW.assetBundle, WWW.LoadFromCacheOrDownload.  
  7. Description  
  8.   
  9. Loads an asset bundle from a disk.  
  10.   
  11. Only uncompressed asset bundles are supported by this function. This is the fastest way to load an asset bundle.  
文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn
与之前使用WWW方式相比,使用 CreateFromFile读取 Assetbundle 方式有以下不同:

1、WWW是异步的, CreateFromFile 是同步的。

2、CreateFromFile接口读取的必须是没有压缩的Assetbundle文件。


来对比两种方式的打包与读取

文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn

打包Assetbundle 压缩 与 不压缩

如果使用 CreateFromFile 这个API 来读取 Assetbundle ,那么打包 Assetbundle 的时候要注意打包成 非压缩的 ,也就是要加上 这个 设置。

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. BuildAssetBundleOptions.UncompressedAssetBundle  

代码如下:

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEditor;  
  4. using System.IO;  
  5.   
  6. public class NewBehaviourScript : Editor {  
  7.   
  8.     [MenuItem ("cp/build Girl NoLZMA")]  
  9.     static void BuildGirlNoLZMA()  
  10.     {  
  11.         string targetdir = Application.dataPath + "/bundleNoLZMA";  
  12.           
  13.         uint crc = 0;  
  14.         //公共资源入栈;  
  15.         BuildPipeline.PushAssetDependencies ();  
  16.           
  17.         string filePath = "Assets/res/01.png";  
  18.         Object obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  19.         //Build;  
  20.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/01.png.unity3d", out crc,BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  21.         {  
  22.             AssetDatabase.Refresh ();  
  23.         }  
  24.   
  25.         filePath = "Assets/res/Aoki Shizuku.mp3";  
  26.         obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  27.         //Build;  
  28.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/Aoki Shizuku.mp3.unity3d", out crc,BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  29.         {  
  30.             AssetDatabase.Refresh ();  
  31.         }  
  32.   
  33.           
  34.         //普通资源入栈;  
  35.         BuildPipeline.PushAssetDependencies ();  
  36.           
  37.         filePath = "Assets/Resources/Girl.prefab";  
  38.         obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  39.         //Build;  
  40.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/Girl.prefab.unity3d", out crc,BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  41.         {  
  42.             AssetDatabase.Refresh ();  
  43.         }  
  44.           
  45.         BuildPipeline.PopAssetDependencies ();  
  46.         BuildPipeline.PopAssetDependencies ();  
  47.           
  48.     }  
  49.   
  50.   
  51.     [MenuItem ("cp/build Girl")]  
  52.     static void BuildGirl()  
  53.     {  
  54.         string targetdir = Application.dataPath + "/bundle";  
  55.           
  56.         uint crc = 0;  
  57.         //公共资源入栈;  
  58.         BuildPipeline.PushAssetDependencies ();  
  59.           
  60.         string filePath = "Assets/res/01.png";  
  61.         Object obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  62.         //Build;  
  63.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/01.png.unity3d", out crc, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  64.         {  
  65.             AssetDatabase.Refresh ();  
  66.         }  
  67.   
  68.         filePath = "Assets/res/Aoki Shizuku.mp3";  
  69.         obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  70.         //Build;  
  71.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/Aoki Shizuku.mp3.unity3d", out crc, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  72.         {  
  73.             AssetDatabase.Refresh ();  
  74.         }  
  75.   
  76.         //普通资源入栈;  
  77.         BuildPipeline.PushAssetDependencies ();  
  78.   
  79.         filePath = "Assets/Resources/Girl.prefab";  
  80.         obj = AssetDatabase.LoadMainAssetAtPath(filePath);  
  81.         //Build;  
  82.         if (BuildPipeline.BuildAssetBundle(obj, null, targetdir+"/Girl.prefab.unity3d", out crc, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows))  
  83.         {  
  84.             AssetDatabase.Refresh ();  
  85.         }  
  86.   
  87.         BuildPipeline.PopAssetDependencies ();  
  88.         BuildPipeline.PopAssetDependencies ();  
  89.   
  90.     }  
  91. }  

加上 不压缩 的设置后,打包 Assetbundle 速度明显变快。

对比两种方式打包出来的 Assetbundle 文件。  文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn

文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn

WWW 与 CreateFromFile 方式读取 Assetbundle

CreateFromFile 是同步操作,WWW 是异步操作。

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class NewBehaviourScript : MonoBehaviour {  
  5.   
  6.     // Use this for initialization  
  7.     void Start () {  
  8.       
  9.     }  
  10.       
  11.     // Update is called once per frame  
  12.     void Update () {  
  13.         //Debug.Log ("Update");  
  14.     }  
  15.   
  16.     void OnGUI()  
  17.     {  
  18.   
  19.         if(GUILayout.Button("Load Girl"))  
  20.         {  
  21.             StartCoroutine(LoadDepends("file://"+Application.dataPath+"/bundle/01.png.unity3d"));  
  22.             StartCoroutine(LoadDepends("file://"+Application.dataPath+"/bundle/Aoki Shizuku.mp3.unity3d"));  
  23.   
  24.             StartCoroutine(Load("file://"+Application.dataPath+"/bundle/Girl.prefab.unity3d"));  
  25.         }  
  26.   
  27.         if(GUILayout.Button("Load Girl NOLZMA"))  
  28.         {  
  29.             AssetBundle assetbundle01=AssetBundle.CreateFromFile(Application.dataPath+"/bundleNoLZMA/01.png.unity3d");  
  30.             AssetBundle assetbundlemp3=AssetBundle.CreateFromFile(Application.dataPath+"/bundleNoLZMA/Aoki Shizuku.mp3.unity3d");  
  31.   
  32.             AssetBundle assetbundle=AssetBundle.CreateFromFile(Application.dataPath+"/bundleNoLZMA/Girl.prefab.unity3d");  
  33.             Instantiate(assetbundle.mainAsset);  
  34.         }  
  35.     }  
  36.   
  37.   
  38.   
  39.     private IEnumerator LoadDepends(string path)  
  40.     {  
  41.         WWW www = new WWW (path);  
  42.         Debug.Log("LoadDepends 1");  
  43.         yield return www;  
  44.         Debug.Log ("LoadDepends 2");  
  45.         Object obj= Instantiate (www.assetBundle.mainAsset);  
  46.         Debug.Log("LoadDepends 3");  
  47.         yield return new WaitForSeconds (3.0f);  
  48.     }  
  49.   
  50.   
  51.     private IEnumerator Load(string path)  
  52.     {  
  53.         yield return new WaitForSeconds (3f);  
  54.   
  55.         WWW www = new WWW (path);  
  56.         Debug.Log("Load 1");  
  57.         yield return www;  
  58.         Debug.Log ("Load 2");  
  59.         Object obj= Instantiate (www.assetBundle.mainAsset);  
  60.         Debug.Log("Load 3");  
  61.         www.assetBundle.Unload (false);  
  62.         Resources.UnloadUnusedAssets ();  
  63.     }  
  64.   
  65. }  

文章转自http://blog.youkuaiyun.com/huutu 星环游戏 http://www.thisisgame.com.cn

注意:

使用 不压缩 打包 Assetbundle 的方式,推荐大家使用 7Zip 的 LZMA 压缩算法进行整体压缩,在游戏开始时进行解压。 


示例工程下载:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. http://pan.baidu.com/s/1o63fOz4  
建行报专版报道建设银行金融科技发展历程 经过十多年的建设,总行前中后台部门都有了自己的业务系统,但系统“部门”特征显著,渠道、客户、产品的横向整合不足,产品系统层次化、结构化、参数化程度不高,渠道支持产品快速部署以及跨渠道服务能力不足,管理分析类系统建设相对滞后,系统较弱的可扩展能力在应对高速增长的交易量时已疲态尽显,同时安全稳定运行的压力和风险日益积聚。站在新的历史起点上,科技条线将聚焦主责主业,完善信息科技管理体系,紧紧围绕安全生产中心任务,持续推动技术能力复用共享和自主可控,为全行做好金融五篇大文章,推动业务高质量发展提供技术支撑。 阅读详情

相关推荐

聚焦112Gb/s SerDes芯片的AN/LT端口自协商和链路学习,评估验证高速链路的信号质量并分析调优(400/800G高速以太网互联接口,AI加速卡网络RDMA性能测试,交换背板接口性能评估)

在112G SerDes高速通道下的400G/800G高速以太网端口下,如何保障通信速率,验证SerDes的数据完整性和链路余量,自动协商(AN)和链路训练(LT)功能显得尤其重要,其在DAC、ACC、AEC铜缆连接或高速背板通信上,自动协商(AN)和链路训练(LT)的工作与否将决定高速链路传输质量的优劣。本文将系统的讨论介绍自动协商(AN)和链路训练(LT)的测试流程,其可以独立使用,也可以与teledynelecroy SierraNet M1288配合使用。

专注有线以太网性能测试--丹麦信雅纳网络(Xena Networks) 9405

Unity3D研究院之Android同步方法读取streamingAssets

http://www.xuanyusong.com/archives/4033

zengjunjie59的博客 653

Linux Wireless之80211(nl80211, cfg80211, mac80211)

Linux Wireless之80211(nl80211, cfg80211, mac80211)前言在Linux无线子系统中,cfg80211、mac80211和nl80211是三个关键的组件,它们共同工作以实现对802.11设备的配置和管理。cfg80211负责内核空间的通用API,mac80211负责具体的MAC层实现,而nl80211则作为用户空间与内核空间之间的桥梁,用于配置管理和通信。Netlink 是一个 Linux 中的 socket 类型,用于在内核与用户空间之间传递事件。

DD'Notes 1480

AssetBundle.CreateFromFile使用时注意事项

在使用AssetBundle.CreateFromFile加载AssetBundle时有两点需要注意: 1:在创建资源包时需要选择不压缩(unity5.x资源打包方式) AssetBundleManifest amf = BuildPipeline.BuildAssetBundles(assetPath , abbs ,BuildAssetBundleOptions.Uncompressed

fucun1984686003的专栏 3567

Codex VS Claude Code 全面测评!代码开发到底选谁?

评测结果6项指标(设计质量、提示遵从度、响应式、代码质量、细节关注、惊喜度)虽未公布最终赢家,但实测本身已揭示两工具在前端任务上的直接差异。Codex基于OpenAI的云沙箱架构,API通过全球CDN分发,但在国内直连时,依赖特定网络环境。:纯终端工具,直接在你的iTerm或终端中运行,不新建窗口、不切换上下文,与本地开发环境无缝融合。GPT-5.3 Codex(xhigh)输入$1.75/百万token,输出$14.00/百万token,混合均价约**$4.81/百万token**。

Jedudu的博客 3084

OpenFeign, Zuul, Gateway相互不兼容的问题总结

版本 Lib Vresion spring-cloud-starter-gateway 3.1.0 spring-cloud-dependencies 2021.0.0 spring-cloud-starter-netflix-zuul 2.2.6.RELEASE spring-cloud-starter-openfeign 3.1.0 1. Zuul 与OpenFeign 一起使用的问题 错误信息 jav.

Harry的博客 4132

【Unity3d】关于AssetBundle.CreateFromFile()方法加载资源失败解决方法

今天学习Unity3d AssetBundle的内容,对于已经打好的AssetBundle,用WWW.LoadFromCacheOrDownload()能正常加载到游戏中,在看完雨松文章后改成AssetBundle.CreateFromFile()缺加载失败;原因就在于 这个path路径问题; 【路径区别】一个需要"file://",一个不需要; 1.WWW.LoadFromCache

chinacyr(灵月) 1万+

大数据Alluxio面试题及参考答案

Alluxio 在大数据生态里的定位是作为数据编排层,能在不同计算框架和存储系统之间起到桥梁的作用。它的核心功能在于加速数据访问,让大数据应用能够更高效地使用数据。Alluxio 把数据存储和数据处理分离开来,使计算框架可以在不考虑底层存储细节的情况下访问数据,这样就提高了系统的灵活性和可扩展性。Alluxio 和 HDFS 既存在关联又有区别。从关联方面来看,HDFS 是一种广泛使用的分布式文件系统,很多大数据应用都将其作为主要的数据存储系统。Alluxio 可以和 HDFS 集成,把 HDFS 当作底层

大模型大数据攻城狮的专栏 862

Unity Assetbundle的加载方式的效率和内存占用

一,三加载的Assetbundle文件对象22.2MB,unity自带压缩的ab文件 二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩url指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。一,WWW.LoadFromCacheOrDownload(string url): 异步方法 从指定路径开始loa

u012740992的专栏 1万+

手把手教你学Simulink--智能控制算法的控制算法领域仿真建模实例:基于Simulink的遗传算法优化控制仿真模型

通过上述步骤,你可以设计并仿真一个基于Simulink的遗传算法优化控制模型。这种方法适用于许多复杂的优化场景,尤其是当传统方法难以找到最优解时。随着经验的积累,你可以进一步优化遗传算法的参数设置,或者结合其他智能优化技术(如粒子群优化、差分进化等)提升优化性能。

MHD0815的博客 208

verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板

使用Verilog HDL设计的一个能够自启动、具有正反转功能的三相六拍步进电机脉冲分配器。已经写好Nexy4DDR的管脚约束文件 可以通过Nexys4DDR开发板的PMOD接口连接步进电机进行调试。 使用verilog语言 在vivado2018.2下运行编译下载都正确,(也可在ISE,QuartusII下使用)下面是工程截图: ...

QQ_778132974的博客 2593

AssetBundle.CreateFromFile的有趣事情

有趣的事情发生了: [@MenuItem("AssetBundles/Build AssetBundles")] staticvoid BuildABs () { AssetBundleBuild[] buildMap = new AssetBundleBuild[1]; buildMap [0].assetBundleName ="test.assetbundle";/...

weixin_30954265的博客 82

c#【保姆级教程】基于System.Text.Json 支持多态类型序列化! 手把手教你实现一个通用的 PolymorphicJsonConverter!

我们需要自己实现一个继承自的转换器,在序列化时记录具体类型,在反序列化时根据类型标识还原成正确的子类对象。public abstract class WorkStepBase { /* 抽象方法等 */ }public class Person : WorkStepBase { /* 实现 */ }public class Product : WorkStepBase { /* 实现 */ }特性说明✅ 自动发现子类无需手动维护类型列表,自动扫描程序集✅ 类名映射。

一个编程的同学 425

Unity3D读取assetbundle

方法一、GreatFromFile方法加载模型 优缺点: 建议使用AssetBundle.CreatFromFile 它是一个同步方法。现在IOS 和 android 都支持了。打包的时候需要选择不压缩 assetbundle打包方式: 1 BuildPipeline.BuildAssetBundle(obj, null, targetPath, BuildAsse...

dengzhongfu6635的博客 183

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Unity3d 4.6版本时assetbundle.createFromFile的问题

总的来说这个createFromFile的路径简直是天坑,它与从www读取时的路径是不一样的。 尤其是android平台下 我们都知道在 Android 平台下使用 WWW 的加载方式十分的顺畅。一个路径类似于这样:jar:file:///data/app/[APP的名字].apk!/assets/AssetBundles/ABFile/ 在使用 Win 或 Mac 测试

Orca的移动开发轨迹 2172

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Unity3D日常开发】Unity3D中资源加载及卸载接口整理

虽然从事Untiy那么久,有时资源加载这块的接口还是记的不是很清楚,今天小编就就跟大家一起整理记忆一下,主要是参考了Unity的官方文档。 加载: Resources.Load: 加载app包内Resources/目录的一个asset; Resources.LoadAsync: Resources.Load的异步方法; Resources.LoadAll: 类似Resources.L...

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2645

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Unity3D 5.3 新版AssetBundle使用方案及策略

Unity3D 5.3 新版AssetBundle使用方案及策略 作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权陈嘉栋(慕容小匹夫),并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言。  知乎专栏: Runtime 联系方式: Email:shaun.cha

优秀技术文章收录 5479

Unity3d中使用assetbundle

1、导出assetbundle:   ①单个资源导出成assetbundle;   ②多个资源导出成一个assetbundle; 2、读取assetbundle:   ①加载到内存;   ②解压为具体资源。 1、导出assetbundle:    ①单个资源导出成assetbundle; BuildPipeline.BuildAssetBundle(Object obj...

weixin_30940783的博客 99

Unity3D 内存 释放

最转载自:http://cl314413.blog.163.com/blog/static/190507976201322713921743/ 近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大.这里写下关于Unity3D对于内存的管理与优化. Unity3D里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。Res...

Happy_zailing的博客 1335

转载:Unity3D占用内存太大的解决方法

原文链接:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resourc...

jian_0的博客 694

unity3d 加载和内存管理

Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。   其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完

进击的Unity3d 738

Unity3D动态加载外部资源

最近一直在和这些内容纠缠,把心得和大家共享一下:Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。其实场景里所有静态的对象也有这么一个加载过程...

weixin_30325487的博客 283

Unity3D的内存管理机制

转自:http://m.blog.csdn.net/jbjwpzyl3611421/article/details/11050239详细说一下细节概念:AssetBundle运行时加载: 来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法 也可以来自Memory,用CreateFromMemory(byte[]),这个byte[]可以来自文

MeetStarOne的博客 1546

Unity3D资源管理整理

目录1.加载2.卸载 1.加载 Resources.Load: 加载app包内Resources/目录的一个asset; Resources.LoadAsync: Resources.Load的异步方法; Resources.LoadAll: 类似Resources.Load,但是用于加载某目录下所有asset; Resources.LoadAssetAtPath: 加载Asset/目录下的资源,...

weixin_44973055的博客 852

Unity3D - 资源管理

转载Unity3D - 资源管理--夜风_  一直没有总结过Unity的资源管理,都是随用随看文档。今天有人问,竟然没说上来,说起来也做了两款Unity游戏,惭愧。这里总结一下,加深自己对Unity资源管理的理解。主要参考了Unity官方文档之Resources和AssetBundle。     Unity有两种动态加载资源的方式,Resources.Load和AssetBundl

Hing 530
上一篇: System.SerializableAttribute
下一篇: unity文件夹
appppppen
博客等级 码龄11年 13粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值