ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:425.02KB ,
资源ID:9443422      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9443422.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(从服务器端获取资源动态加载到场景.docx)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

从服务器端获取资源动态加载到场景.docx

1、[unity3d]从服务器端获取资源动态加载到场景 分类: 编程语言/ C语言/ 文章 我们的游戏制作完发布出去提供给玩家,为了给玩家带来更好的游戏体验,要做各种的优化以及设计,首先,游戏资源的加载就是一个非常重要的方面(尤其是网页游戏)。由于我们的游戏资源比较大,不能一下全部加载出来,如果是这样,可能会造成玩家长时间的等待。所以我们应该采取动态加载的方式,让玩家在玩游戏的过程中来一点一点从服务器加载游戏资源。要实现这样的效果,首先就必须要制作用于一点点加载的游戏资源。 (注:本文只是谈及这些游戏资源的制作和下载,关于游戏运行中的动态加载不做讨论) (再注:本文涉及到的代码都是以C#

2、语言来编写的) 开发环境: Windows 7 Unity3D 3.5.1f2 本文中将会涉及到以下的内容: 1、 UnityEditor命名空间 2、 Editor模式下窗口制作 3、 导出功能的具体实现 4、 资源的下载 5、 下载后使用 1、 UnityEditor命名空间 这个命名空间下的类是在Unity的编辑模式下使用的,我们可以用它来制作各种小工具来辅助开发,提高开发效率。这里的所有的类都不能在Unity的运行时里使用。只能在编辑器下使用,并且在使用他们的时候还必须要放到项目Project视图下的Editor文件夹中。需要注意一点的就是,我们的项目代码里如果有

3、使用到UnityEditor命名空间时,在项目的最后编译是不能通过的,必须要移除他们。 我们来看一个我们即将使用到的一个Attribute: MenuItem是UnityEditor命名空间下的一个属性标志,它可以定义出一个菜单条目,并添加在Unity编辑器的菜单栏中,语法: [csharp] view plaincopy 1. [MenuItem(“Tools/Export”)] 我们来新建一个工程看一下效果(具体创建步骤这里真的不说了) (注:我的项目中加了很多装饰性的东西,这里就不一一说明怎么实现了哈) 完成之后,先在Project下创建Editor文件夹并创建一个脚本

4、文件,输入以下内容: [csharp] view plaincopy 1. using UnityEditor; 2. using UnityEngine; 3. using System.Collections; 4. 5. ///

6. /// author : qyxls 7. /// 8. public class ExportTools : MonoBehaviour 9. { 10. [MenuItem("Tools/Export")] 11. static void Execute ()

5、 12. { 13. Debug.Log("Menu is selected !!"); 14. } 15. } 当我们点击菜单栏上的对应菜单选项:ToolsàExport时, 菜单项会调用静态的Execute()方法,即可在Console面板中打印出”Menu is selected”。 这里要注意两点: 1、 引入UnityEditor命名空间。 2、 MenuItem要调用的方法需要是static的。 关于UnityEditor的更多详细内容,请参照官方文档,这里不做重点讲解。 2、Editor模式下窗口制作 要制作一个小工具,提供出一个友好界面是很

6、有必要的。UnityEditor下的类可以很方便的完成这一需求。我们通过这些类,可以实现各种不同的控件: 怎么样,还算丰富吧?这些控件的具体实现我不想说,请自行查看API吧。 这里我还是遵循本文的主旨,围绕本文的中心思想(本文我们是要导出资源到服务器,并在游戏中下载这个资源过来使用)实现一个界面。 用例描述: 导出场景中的一个模型,并带着默认材质,如果该模型有多个可替换的贴图,也把这些贴图作为该模型的资源一并导出到一个资源包中。 按照这个需求,我猜想界面应该是这样的: 一个导出模型的口,一个提供可选贴图数量的口,根据用户输入的可选数量,给提供出对应的贴图导出口,最后填写完毕之后

7、有一个按钮用于导出交互。 ,不好意思,这哪里是猜想,我其实早就写好了。其实也没骗你了,我在写之前是猜想的! 要实现上面这个窗口,我该怎么做呢? 首先,定义一个继承EditorWindow的类,然后,重写OnGUI方法即可。我们这里在之前的代码基础上做修改添加: [csharp] view plaincopy 1. using UnityEditor; 2. using UnityEngine; 3. 4. ///

5. /// author : qyxls 6. /// 7. 关闭 - 关闭 - publi

8、c class ExportTools : "color:#ff0000;">EditorWindow 8. { 9. [MenuItem("Tools/Export")] 10. static void Execute () 11. { 12. // 实例化一个Window窗口 // 13. ExportTools windows = EditorWindow.GetWindow(true, "Export Tools"); 14. } 15. 16. void OnG

9、UI() 17. { 18. 19. } 20. } 这里要注意的就是将原来的脚本有继承自MonoBehaviour 修改为继承自EditorWindow。并在Execute ()方法中对当前的Window实例化。这时我们就可以得到一个Window窗口了: 其次,就是向我们生成的窗口中添加不同的控件,这些控件的生成都是在OnGUI()方法中实现的。和MonoBehaviour的OnGUI方法一样,EditorWindow的OnGUI()方法也主要是处理UI的,我们关于UI控件的生成处理都要写在这个方法里。OnGUI()这个方法每帧调用好几次(每个事件一次),所以一些逻辑

10、处理要避免在这里调用。 [csharp] view plaincopy 1. private string savePath; 2. private GameObject exportObject; 3. private int optionalCount = 0; 4. private Texture2D[] optionalTexture = new Texture2D[0]; 5. 6. void OnGUI() 7. { 8. /* 9. * ObjectField: 10. * 是这里的第一个控件,它可以允许用户拖拽将一个Object的对象赋给

11、它。 11. * 如果要限制可接收的对象类型,可以通过第三个参数来限制类型这里表示直接收GameObject类型 12. * 第四个bool型的参数标志能否接受当前scene里的对象,true表示接受 13. * 这个方法返回的是一个Object类型的值,最后要将它转化为需要的类型 14. */ 15. exportObject = EditorGUILayout.ObjectField("Export Object", exportObject, 16. typeof(GameObject), true) 17. as GameObject; 18. // 就

12、相当于提供一个换行,用于格式化控件的 // 19. EditorGUILayout.Space(); 20. // IntField:该控件只能输入 int 类型的值// 21. optionalCount = EditorGUILayout.IntField("Optional Count", optionalCount); 22. for(int i=0; i

13、 new Texture2D[optionalCount]; 27. } 28. 29. EditorGUILayout.Space(); 30. // 这里将 ObjectField 限制只接受Texture2D类型的值 // 31. optionalTexture[i] = EditorGUILayout.ObjectField("Optional Textures " + i, optionalTexture[i], 32. typeof(Texture2D), false) 33. as Texture2D; 34. } 35. 36. Edito

14、rGUILayout.Space(); 37. EditorGUILayout.Space(); 38. 39. EditorGUILayout.BeginHorizontal(); 40. EditorGUILayout.Space(); 41. // 导出按钮 // 42. if(GUILayout.Button("EXPORT", GUILayout.Width(100), GUILayout.Height(20))) 43. { 44. 45. } 46. 47. EditorGUILayout.EndHorizontal(); 48. }

15、 这里一些必要的东西我都添加都注释理了,就不重复了。 到这里这个窗口就基本算是完成了。 3、导出功能的具体实现 以上只是实现出了这样一个窗口,具体响应功能,以及必要的逻辑实现还都不具备,这里我们将为这个窗口添加具体的功能实现代码。 [csharp] view plaincopy 1. "white-space:pre"> private void ExportAndSave(GameObject go) 2. { 3. //该方法将打开保存对话框,选择导出文件的保存位置// 4. savePath = EditorUtility.Save

16、FilePanel("Save", @"E:\", go.name, "unity3d"); 5. Export(go, savePath); 6. } 7. 8. private void Export(GameObject go, string filePath) 9. { 10. // IsPersistent 判断传入的对象是磁盘文件还是场景文件(即是否是Project视图下的文件,是返回true)// 11. if(!EditorUtility.IsPersistent(go)) 12. { 13. GameObject tmp = GameObje

17、ct.Instantiate(go) as GameObject; 14. go = GetPrefab(tmp, go.name) as GameObject; 15. } 16. Object[] asset = optionalTexture; 17. if(File.Exists(filePath)) File.Delete(filePath); 18. /* 19. BuildPipeline.BuildAssetBundle():该方法是将提供的对象导出成Unity能识别的二进制文件 20. 第一个参数是提供一个要导出的对象,第二个参数是一个Object

18、[]类型,它可以将数据附加到第一个 21. 参数定义的主数据一起整体导出.但是这两个参数要求必须是磁盘文件的格式,所以上面的if语句判断 22. 是否是磁盘文件类型,如果不是,先将其转化为prefab,在Assets下临时保存一下。这个转化就是要 23. 用到 PrefabUtility 类里的方法。 24. */ 25. BuildPipeline.BuildAssetBundle(go, asset, filePath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.StandaloneWindows)

19、 26. // 将暂时生成的prefab文件使用完后删除 // 27. AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(go)); 28. } 29. 30. ///

31. /// 该方法来产生临时prefab文件 32. /// 33. private Object GetPrefab(GameObject go, string name) 34. { 35. Object result = PrefabUtility.CreateEmptyPrefab(

20、"Assets/" + name + ".prefab"); 36. result = PrefabUtility.ReplacePrefab(go, result); 37. Object.DestroyImmediate(go); 38. return result; 39. } 这里我又新添加了三个方法来具体实现导出并保存的逻辑: · private voidExportAndSave(GameObject go): 在这个方法里只要关注一下怎么打开一个保存对话框就可以了 [csharp] view plaincopy 1. //该方法将打开保存对话框,选择

21、导出文件的保存位置。第二和第三个参数表示默认保存位置和默认文件名// 2. savePath =EditorUtility.SaveFilePanel("Save", @"E:\", go.name,"unity3d"); · private void Export(GameObjectgo, string filePath) 这个方法具体实现了导出二进制文件的功能。这里需要说明的是 BuildPipeline.BuildAssetBundle(): 该方法是将提供的对象导出成Unity能识别的二进制文件第一个参数是提供一个要导出的对象,第二个参数是一个Object[]类型,它可以将

22、数据附加到第一个参数定义的主数据一起整体导出.但是这两个参数要求必须是磁盘文件的格式,所以上面的if语句判断是否是磁盘文件类型,如果不是,先将其转化为prefab,在Assets下临时保存一下。这个转化就是要用到 PrefabUtility 类里的方法。具体判断是否是磁盘文件,是通过 if(!EditorUtility.IsPersistent(go))这一句来判断的:如果go不是磁盘文件,是场景对象,则执行该语句里的代码来生成磁盘文件,具体的是下面这个方法来实现的。 · private ObjectGetPrefab(GameObject go, string name) 我们在导出前,

23、如果导出信息设置的不正确,可能会致使导出的文件有问题或者不可用,所以在导出之前对信息有效性的验证也是必要的: [csharp] view plaincopy 1. "white-space:pre"> ///

2. /// 数据验证,如果导出信息填写有误,将给用户错误提示 3. /// 4. private bool Validate() 5. { 6. bool b1 = (exportObject == null); 7. bool b2 = false; 8. 9. foreach(

24、Texture2D t in optionalTexture) 10. { 11. b2 = b2 || (t == null); 12. } 13. 14. return !(b1 || b2); 15. } 如果用户全部信息都填写完整了,该方法会返回true,导出时可以根据返回值状态来做相应的响应。 [csharp] view plaincopy 1. "white-space:pre"> // 导出按钮 // 2. if(GUILayout.Button("EXPORT", GUILayout.Width(100), GUI

25、Layout.Height(20))) 3. { 4. if(Validate()) 5. { 6. ExportAndSave(exportObject); 7. Clear();//成功导出数据后,清除导出信息// 8. } 9. else 10. { 11. //导出信息填写有误时,给出提示// 12. EditorUtility.DisplayDialog("错误提示", "导出信息设置有误,请返回检查!", "确定"); 13. } 14. } 这里可以看到我还添加了一个Clear()方法,该方法在用户导出完毕时,将导出工具面板的信

26、息清除掉,以便开始导出其它资源: [csharp] view plaincopy 1. "white-space:pre"> ///

2. /// 所有数据正确导出后,清除填写的导出信息,以便导出下一条数据 3. /// 4. private void Clear() 5. { 6. exportObject = null; 7. optionalCount = 0; 8. } 到这里,我们导出的所有逻辑就完成了,这样子的一个导出工具也基本完成了。此时,我们的完整代码应该是这个样子的:

27、 [csharp] view plaincopy 1. using System.IO; 2. using UnityEditor; 3. using UnityEngine; 4. 5. ///

6. /// author : qyxls 7. /// 8. public class ExportTools : EditorWindow 9. { 10. [MenuItem("Tools/Export")] 11. static void Execute () 12. { 13. // 实例化一个Wi

28、ndow窗口 // 14. EditorWindow.GetWindow(true, "Export Tools"); 15. } 16. 17. private string savePath; 18. private GameObject exportObject; 19. private int optionalCount = 0; 20. private Texture2D[] optionalTexture = new Texture2D[0]; 21. 22. void OnGUI() 23. { 24. /*

29、25. * ObjectField: 26. * 是这里的第一个控件,它可以允许用户拖拽将一个Object的对象赋给它。 27. * 如果要限制可接收的对象类型,可以通过第三个参数来限制类型这里表示直接收GameObject类型 28. * 第四个bool型的参数标志能否接受当前scene里的对象,true表示接受 29. * 这个方法返回的是一个Object类型的值,最后要将它转化为需要的类型 30. */ 31. exportObject = EditorGUILayout.ObjectField("Export Object", exportObject, 3

30、2. typeof(GameObject), true) 33. as GameObject; 34. // 就相当于提供一个换行,用于格式化控件的 // 35. EditorGUILayout.Space(); 36. // IntField:该控件只能输入 int 类型的值// 37. optionalCount = EditorGUILayout.IntField("Optional Count", optionalCount); 38. for(int i=0; i

31、ture.Length != optionalCount) 41. { 42. optionalTexture = new Texture2D[optionalCount]; 43. } 44. 45. EditorGUILayout.Space(); 46. // 这里将 ObjectField 限制只接受Texture2D类型的值 // 47. optionalTexture[i] = EditorGUILayout.ObjectField("Optional Textures " + i, optionalTexture[i], 48. typeof(Tex

32、ture2D), false) 49. as Texture2D; 50. } 51. 52. EditorGUILayout.Space(); 53. EditorGUILayout.Space(); 54. 55. EditorGUILayout.BeginHorizontal(); 56. EditorGUILayout.Space(); 57. // 导出按钮 // 58. if(GUILayout.Button("EXPORT", GUILayout.Width(100), GUILayout.Height(20))) 59. { 60.

33、if(Validate()) 61. { 62. ExportAndSave(exportObject); 63. Clear();//成功导出数据后,清除导出信息// 64. } 65. else 66. { 67. //导出信息填写有误时,给出提示// 68. EditorUtility.DisplayDialog("错误提示", "导出信息设置有误,请返回检查!", "确定"); 69. } 70. } 71. 72. EditorGUILayout.EndHorizontal(); 73. } 74. 75. private vo

34、id ExportAndSave(GameObject go) 76. { 77. //该方法将打开保存对话框,选择导出文件的保存位置。第二和第三个参数表示默认保存位置和默认文件名// 78. savePath = EditorUtility.SaveFilePanel("Save", @"E:\", go.name, "unity3d"); 79. Export(go, savePath); 80. } 81. 82. private void Export(GameObject go, string filePath) 83. { 84. // IsPer

35、sistent 判断传入的对象是磁盘文件还是场景文件(即是否是Project视图下的文件,是返回true)// 85. if(!EditorUtility.IsPersistent(go)) 86. { 87. GameObject tmp = GameObject.Instantiate(go) as GameObject; 88. go = GetPrefab(tmp, go.name) as GameObject; 89. } 90. //Texture2D本身就是磁盘文件了,这里就没必要再转化了// 91. Object[] asset = optional

36、Texture; 92. if(File.Exists(filePath)) File.Delete(filePath); 93. /* 94. BuildPipeline.BuildAssetBundle():该方法是将提供的对象导出成Unity能识别的二进制文件 95. 第一个参数是提供一个要导出的对象,第二个参数是一个Object[]类型,它可以将数据附加到第一个 96. 参数定义的主数据一起整体导出.但是这两个参数要求必须是磁盘文件的格式,所以上面的if语句判断 97. 是否是磁盘文件类型,如果不是,先将其转化为prefab,在Assets下临时保存一下。这个转

37、化就是要 98. 用到 PrefabUtility 类里的方法。 99. */ 100. BuildPipeline.BuildAssetBundle(go, asset, filePath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.StandaloneWindows); 101. // 将暂时生成的prefab文件使用完后删除 // 102. AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(go)); 103. } 104. 105

38、 ///

106. /// 该方法来产生临时prefab文件 107. /// 108. private Object GetPrefab(GameObject go, string name) 109. { 110. Object result = PrefabUtility.CreateEmptyPrefab("Assets/" + name + ".prefab"); 111. result = PrefabUtility.ReplacePrefab(go, result); 112. Object.DestroyImm

39、ediate(go); 113. return result; 114. } 115. 116. ///

117. /// 数据验证,如果导出信息填写有误,将给用户错误提示 118. /// 119. private bool Validate() 120. { 121. bool b1 = (exportObject == null); 122. bool b2 = false; 123. 124. foreach(Texture2D t in optionalTexture) 125. { 126

40、 b2 = b2 || (t == null); 127. } 128. 129. return !(b1 || b2); 130. } 131. 132. ///

133. /// 所有数据正确导出后,清除填写的导出信息,以便导出下一条数据 134. /// 135. private void Clear() 136. { 137. exportObject = null; 138. optionalCount = 0; 139. } 140. } 工具界面应该是这样子: 到这里我们通

41、过这个小小的导出工具就可以制作出要需要的资源文件了,这些资源文件是存放在服务器上的,接下来我们一起看看关于这些资源文件的下载。 4、获取资源文件 这些文件是可以就从本地磁盘加载进游戏里使用的,但这里为了模拟从远程服务器下载这样一个模式,我还是将刚刚制作好的文件上传到远程主机来给大家展示一下这种的从远端获取的做法(其实从本地磁盘加载几乎是一样的)。 第一步:将文件上传到服务器。 我真的没有服务器,但是我感觉度娘很热情,估计能帮上我们什么忙。 (此处省略好几个字。。。。。。其实就是怎么将刚刚导出的文件上传到“百度云”) 上传不说了,这里看看怎么获取刚刚上传资源的完整地址。 用Goog

42、le浏览器(码农用这个没有什么大问题吧?)登上“百度云”,找到刚刚上传的文件,点击下载,然后按Ctrl+J打开下载列表,右击正在下载的文件,选择“复制链接地址”就可以取到该文件的完整地址了。 这个是我的: 这里我们暂且先这样用着,在真正的项目开发中,资源的地址肯定会直接或间接的给出来的,这里不必纠结。 我们来具体看看下载,这里下载要使用到的类是WWW。在实例化WWW的时候,我们只需将资源的url地址给它,即可开始下载,实例化完WWW后我们只需判断这个实例是否下载完成,如果完成了,即可以取下载来的资源来用了。代码是这样的:(这个类不是UnityEditor里的类,新建一个C#类

43、并继承自MonoBehaviour) [csharp] view plaincopy 1. using UnityEngine; 2. using System.Collections; 3. ///

4. /// author : qyxls 5. /// 6. public class Downloader : MonoBehaviour 7. { 8. private string url = " "; 9. private WWW www; 10. 11. void Start () 12. {

44、 13. this.www = new WWW(this.url); 14. } 15. 16. void Update () 17. { 18. if(www == null) return; 19. if(www.isDone) 20. { 21. print ("Download completed"); 22. } 23. } 24. } 当启动了Unity之后,会发现很快就会在Console视图中打印出来了“Download completed”,而且还孜孜不倦的一直不肯停歇,这里我们下载完了,只要对下载完的资源处理一次就够了,没必要

45、没完没了的处理,多浪费感情啊,所以我们该定义一个标志,来标记下载完成这么一个状态: [csharp] view plaincopy 1. private bool isCompleted = false; 2. void Update () 3. { 4. if(www == null) return; 5. if(!isCompleted && www.isDone) 6. { 7. print ("Download completed"); 8. isCompleted = true; 9. } 10. } 现在是不是只有这么一条打印信息了?

46、 这段代码是非常简单的,这里也没有什么要多说的,就是提这么一点,这里我们是直接根据资源的URL去访问下载的该资源,但在实际项目中,我们经常要处理的是根据不同的条件访问同一地址而返回不同的数据来使用,这里要使用的是WWW的另一个构造方法,可以带除URL外的其它请求参数: [csharp] view plaincopy 1. private void WWWWithParameter(string url, string parameter) 2. { 3. WWWForm form = new WWWForm(); 4. form.AddField("Content", par

47、ameter); 5. WWW www = new WWW(url, form); 6. } 可以看到,只需将参数封装在WWWForm中再去用WWW访问服务器就可以了。 (本例中我们没有采用带参数的访问是因为这样的话,我们还要加一个后台处理程序,要根据请求参数来返回数据,这样我们就必须要在本机上安装服务器,书写服务器代码等等等等,这样就得多做很多其它与我们这个话题相去深远的工作了。。。。。。。。(好吧,我承认我不会配置服务器)) 到此本节的全部代码是这样子的: [csharp] view plaincopy 1. using UnityEngine; 2. using System.Collections; 3. ///

4. /// author : qyxls 5. /// 6. public class Downloader : MonoBehaviour 7. { 8. private string url = "

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服