2017年10月14日 19:24:14 醉忘天涯一线天 阅读数:9021
出处:https://blog.csdn.net/lmyfx/article/details/78236225

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmyfx/article/details/78236225
一、设置assetBundleName
二、构建AssetBundle包
三、上传AssetBundle到服务器
四、把AssetBundle放到本地
五、操作AssetBundle
六、完整例子
七、AssetBundle Manager管理工具
八、备注知识

一、设置assetBundleName

如果没有设置AssetBundleName,会打包所有的Assets下的资源,如果设置,就只打包设置了名字的资源

1、在unity编辑器界面手动设置

输入所需的AssetBundle名称。请注意,AssetBundle名称确实支持一种类型的文件夹结构,这取决于您键入的内容。要添加子文件夹,将文件夹名称以“/”分隔。例如:AssetBundle名称“environment/ forest”将在environment子文件夹下创建一个名为forest的包

2、遍历所有要打包的资源,通过代码修改assetBundleName

第一步:先获取你要打包的资源的完整目录

方法1:

先用Selection.objects返回场景中所有的对象,

然后用AssetDatabase.GetAssetPath(selected)获取对象完整目录

方法2:

用AssetPostprocessor的OnPostprocessAllAssets方法

方法3:

用IO流的DirectoryInfo.GetFileSystemInfos()

和FileInfonfo获取完整目录(这种方法要注意:获取到的目录如果是”\”或者”//”要替换为“/”)

第二步:用AssetImporter asset= AssetImporter.GetAtPath(path);方法获取AssetImporter

第三步:用asset.assetBundleName=“text”设置AssetBundleName

有以下三种获取目录然后设置assetBundleName的方法

  1. //Selection.objects返回场景中所有的对象
  2. Object[] selects = Selection.objects;
  3. foreach (Object selected in selects)
  4. {
  5. //返回所有对象相对于工程目录的存储路径如Assets/_Scenes/Main.unity
  6. string path = AssetDatabase.GetAssetPath(selected);
  7. //把一个目录的对象检索为AssetImporter
  8. AssetImporter asset = AssetImporter.GetAtPath(path);
  9. asset.assetBundleName = selected.name; //设置Bundle文件的名称
  10. asset.assetBundleVariant = "unity3d";//设置Bundle文件的扩展名
  11. asset.SaveAndReimport();
  12. }
  13. AssetDatabase.Refresh();
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. //文件描述:自动设置Assetbundle名字为文件夹名_文件名.unity3d;
  5. public class AutoSetTextureUISprite : AssetPostprocessor
  6. {
  7. static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
  8. {
  9. foreach (var str in importedAssets)
  10. {
  11. if (!str.EndsWith(".cs"))
  12. {
  13. AssetImporter importer = AssetImporter.GetAtPath(str);
  14. importer.assetBundleName = str;
  15. }
  16. }
  17. foreach (var str in deletedAssets)
  18. {
  19. if (!str.EndsWith(".cs"))
  20. {
  21. AssetImporter importer = AssetImporter.GetAtPath(str);
  22. importer.assetBundleName = str;
  23. }
  24. }
  25. for (var i = 0; i < movedAssets.Length; i++)
  26. {
  27. //Debug.Log("Moved Asset: " + movedAssets[i] + " from: " + movedFromAssetPaths[i]);
  28. }
  29. }
  30. }
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. using System.IO;
  5. /// <summary>
  6. /// 把Resource下的资源打包成.unity3d 到StreamingAssets目录下
  7. /// </summary>
  8. public class Builder : Editor
  9. {
  10. public static string sourcePath = Application.dataPath + "/Resources";
  11. const string AssetBundlesOutputPath = "Assets/StreamingAssets";
  12. //[MenuItem("Tools/AssetBundle/Build")]
  13. public static void BuildAssetBundle()
  14. {
  15. ClearAssetBundlesName();
  16. Pack(sourcePath);
  17. string outputPath = Path.Combine(AssetBundlesOutputPath, Platform.GetPlatformFolder(EditorUserBuildSettings.activeBuildTarget));
  18. if (!Directory.Exists(outputPath))
  19. {
  20. Directory.CreateDirectory(outputPath);
  21. }
  22. //根据BuildSetting里面所激活的平台进行打包
  23. BuildPipeline.BuildAssetBundles(outputPath, 0, EditorUserBuildSettings.activeBuildTarget);
  24. AssetDatabase.Refresh();
  25. Debug.Log("打包完成");
  26. }
  27. /// <summary>
  28. /// 清除之前设置过的AssetBundleName,避免产生不必要的资源也打包
  29. /// 之前说过,只要设置了AssetBundleName的,都会进行打包,不论在什么目录下
  30. /// </summary>
  31. static void ClearAssetBundlesName()
  32. {
  33. int length = AssetDatabase.GetAllAssetBundleNames().Length;
  34. Debug.Log(length);
  35. string[] oldAssetBundleNames = new string[length];
  36. for (int i = 0; i < length; i++)
  37. {
  38. oldAssetBundleNames[i] = AssetDatabase.GetAllAssetBundleNames()[i];
  39. }
  40. for (int j = 0; j < oldAssetBundleNames.Length; j++)
  41. {
  42. AssetDatabase.RemoveAssetBundleName(oldAssetBundleNames[j], true);
  43. }
  44. length = AssetDatabase.GetAllAssetBundleNames().Length;
  45. Debug.Log(length);
  46. }
  47. static void Pack(string source)
  48. {
  49. DirectoryInfo folder = new DirectoryInfo(source);
  50. FileSystemInfo[] files = folder.GetFileSystemInfos();
  51. int length = files.Length;
  52. for (int i = 0; i < length; i++)
  53. {
  54. if (files[i] is DirectoryInfo)
  55. {
  56. Pack(files[i].FullName);
  57. }
  58. else
  59. {
  60. if (!files[i].Name.EndsWith(".meta"))
  61. {
  62. file(files[i].FullName);
  63. }
  64. }
  65. }
  66. }
  67. static void file(string source)
  68. {
  69. string _source = Replace(source);
  70. string _assetPath = "Assets" + _source.Substring(Application.dataPath.Length);
  71. string _assetPath2 = _source.Substring(Application.dataPath.Length + 1);
  72. //Debug.Log (_assetPath);
  73. //在代码中给资源设置AssetBundleName
  74. AssetImporter assetImporter = AssetImporter.GetAtPath(_assetPath);
  75. string assetName = _assetPath2.Substring(_assetPath2.IndexOf("/") + 1);
  76. assetName = assetName.Replace(Path.GetExtension(assetName), ".unity3d");
  77. //Debug.Log (assetName);
  78. assetImporter.assetBundleName = assetName;
  79. }
  80. static string Replace(string s)
  81. {
  82. return s.Replace("\\", "/");
  83. }
  84. }
  85. public class Platform
  86. {
  87. public static string GetPlatformFolder(BuildTarget target)
  88. {
  89. switch (target)
  90. {
  91. case BuildTarget.Android:
  92. return "Android";
  93. case BuildTarget.iOS:
  94. return "IOS";
  95. case BuildTarget.WebPlayer:
  96. return "WebPlayer";
  97. case BuildTarget.StandaloneWindows:
  98. case BuildTarget.StandaloneWindows64:
  99. return "Windows";
  100. case BuildTarget.StandaloneOSXIntel:
  101. case BuildTarget.StandaloneOSXIntel64:
  102. case BuildTarget.StandaloneOSXUniversal:
  103. return "OSX";
  104. default:
  105. return null;
  106. }
  107. }
  108. }

二、构建AssetBundle

1、在Assets中创建一个名为Editor的文件夹,并将一个脚本放在文件夹中

2、类要继承Editor,引用命名空间using UnityEditor;

3、创建菜单目录:[MenuItem("Assets/Build AssetBundles")]

4、调用打包方法

①用AssetBundleBuild类的方法
BuildAssetBundles(string outputPath, BuildAssetBundleOptionsassetBundleOptions, BuildTargettargetPlatform);
或者
BuildAssetBundles(string outputPath,AssetBundleBuild[] builds,BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);

②参数说明:

outputPath:打包Bundle后存储的目录,如:Assets/AssetBundles,这个文件夹不会自动创建,如果它不存在的话,函数将会失败,Directory.Exists(string path)判断目录是否存在,Directory.CreateDirectory(stringpath)创建目录

BuildAssetBundleOptions:Bundle打包方式,none没有任何特殊选项,UncompressedAssetBundle在构建Bundle时不要压缩数据等等

BuildTarget:构建平台,如iphone,windows,android等

AssetBundleBuild[]:看备注知识5

③返回值:AssetBundleManifest,看备注知识6

5、备注知识:AssetBundleBuild

这个类与BuildAssetBundles一起使用。指定一个Bundle包的名称assetBundleName和它将包含的资源(如多张图片、音频等)的名称。

被传递给函数的AssetBundleBuild[]元素数组被称为“构建映射”,并作为指定编辑器包内容的替代方法。

变量:

addressableNames:返回所有的addressableName数组

assetBundleName:AssetBundle的名字

assetBundleVariant:AssetBundle的扩展名如.unity

AssetBundle:指定属于一个addressableName名字的所有资源名字,是一个数组,也就是一个addressableName名字下包含的所有资源名字

例子:在后面

6、备注知识AssetBundleManifest 
包含所有创建Bundle包信息

⑴公开方法

GetAllAssetBundles返回所有的assetbundlenames,是一个string[]数组

GetAllAssetBundlesWithVariant返回所有使用给定扩展名的assetbundlenames,是一个string[]数组

GetAllDependencies(string assetBundleName);:获取所有与指定AssetBundle包存在依赖关系的AssetBundless。也就是给一个assetBundleName,获取所有与他有关系的assetBundleName,返回一个string[]数组

GetDirectDependencies(string assetBundleName):获取所有与指定AssetBundle包存在直接联系的AssetBundless。也就是给一个assetBundleName,获取所有与他有直接关系的assetBundleName,返回一个string[]数组

GetAssetBundleHash

⑵当找到这个对象后就可以对它进行操作

7、例子

第一个方法

  1. // 创建一个Windows AssetBundle包
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System.IO;
  5. public class BuildAssetBundlesExample : MonoBehaviour
  6. {
  7. //创建编辑器菜单目录
  8. [MenuItem("Example/Build Asset Bundles")]
  9. static void BuildABs()
  10. {
  11. //将这些资源包放在一个名为ABs的目录下
  12. string assetBundleDirectory = "Assets/ABs";
  13. //如果目录不存在,就创建一个目录
  14. if (!Directory.Exists(assetBundleDirectory))
  15. {
  16. Directory.CreateDirectory(assetBundleDirectory);
  17. }
  18. BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
  19. }
  20. }

第二个方法

  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.IO;
  4. public class BuildAssetBundlesBuildMapExample : MonoBehaviour
  5. {
  6. [MenuItem("Example/Build Asset Bundles Using BuildMap")]
  7. static void BuildMapABs()
  8. {
  9. // 创建映射数组
  10. AssetBundleBuild[] buildMap = new AssetBundleBuild[2];
  11. //修改assetBundleName第一个
  12. buildMap[0].assetBundleName = "enemybundle";
  13. //assetBundleName = "enemybundle"下的所有资源名称数组
  14. string[] enemyAssets = new string[2];
  15. enemyAssets[0] = "Assets/Textures/char_enemy_alienShip.jpg";
  16. enemyAssets[1] = "Assets/Textures/char_enemy_alienShip-damaged.jpg";
  17. buildMap[0].assetNames = enemyAssets;
  18. //修改assetBundleName第二个
  19. buildMap[1].assetBundleName = "herobundle";
  20. //assetBundleName = "herobundle"下的所有资源名称数组
  21. string[] heroAssets = new string[1];
  22. heroAssets[0] = "char_hero_beanMan";
  23. buildMap[1].assetNames = heroAssets;
  24. //创建Bundle包
  25. //将这些资源包放在一个名为ABs的目录下
  26. string assetBundleDirectory = "Assets/ABs";
  27. //如果目录不存在,就创建一个目录
  28. if (!Directory.Exists(assetBundleDirectory))
  29. {
  30. Directory.CreateDirectory(assetBundleDirectory);
  31. }
  32. BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
  33. }
  34. }

三、上传AssetBundle到服务器

四、把AssetBundle放到本地

五、操作AssetBundle

1、从磁盘目录加载AssetBundle包

⑴AssetBundle放在本地

public static AssetBundle LoadFromFile(string  path uint crc = 0, ulong offset= 0);

说明:从path目录同步加载AssetBundle,返回类型

AssetBundle(LoadFromFileAsync是异步加载)

参数:path读取AssetBundle的目录

crc 校验用参数

offset这个值指定从哪里开始读取AssetBundle,

通常为0

⑵ AssetBundle放在网络

引用using UnityEngine.Networking;命名空间

UnityWebRequest.GetAssetBundle()方法看后面的详细介绍

2、加载AssetBundle包之后,加载包内资源

注意:加载要用协程,否则你不知道是否加载完毕

⑴加载一个资源

AssetBundle类

public Object LoadAsset(string name);

从AssetBundle包中加载名字为name的资源,返回object

public Object LoadAsset(string name, Type type);

加载一个包内名字为name,类型为type的资源

public T LoadAsset(string name);

搞不懂,也是加载名字为name类型为T的资源

⑵加载包内的多个资源

AssetBundle类

public Object[] LoadAllAssets(Type type);

加载包内所有类型为type的资源

public Object[] LoadAllAssets();

加载包内的所有资源

public T[] LoadAllAssets();

搞不懂,也是加载类型为T的资源

⑶备注,上面的方法是同步加载,还有异步加载方法

LoadAllAssetsAsync,LoadAssetAsync

3、从包内加载资源以后,可以对这个对象进行各种操作了

4、备注知识点

⑴Path.Combine(string, string) 连接两个字符串

⑵ Application 访问应用程序运行时数据

Application.streamingAssetsPath输出

E:/UnityProject/ARVR/Workspace/MyCharacter/Assets/StreamingAssets

Application.dataPath输出

E:/UnityProject/ARVR/Workspace/MyCharacter/Assets

值得注意的是如果在PC上使用时需要在每个文件夹前加入斜杠,如:

string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;

例子:注意:加载要用协程,否则你不知道是否加载完毕

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.IO;
  4. public class LoadFromFileExample : MonoBehaviour
  5. {
  6. void Start()
  7. {
  8. //从文件夹里加载包
  9. var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
  10. if (myLoadedAssetBundle == null)
  11. {
  12. Debug.Log("Failed to load AssetBundle!");
  13. return;
  14. }
  15. //从Bundle包中加载名字为:MyObject的资源,加载为GameObject
  16. var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
  17. //实例化
  18. Instantiate(prefab);
  19. //卸载包中资源的内存
  20. myLoadedAssetBundle.Unload(false);
  21. }
  22. }

5、AssetBundle放在网络

⑴创建一个UnityWebRequest,通过HTTP GET下载一个Unity资产包

引用using UnityEngine.Networking;命名空间

UnityWebRequest.GetAssetBundle()方法

  1. public static UnityWebRequest GetAssetBundle(string uri, uint crc);
  2. public static UnityWebRequest GetAssetBundle(string uri, uint version, uint crc);
  3. public static UnityWebRequest GetAssetBundle(string uri, Hash128 hash, uint crc);
  4. public static UnityWebRequest GetAssetBundle(string uri, CachedAssetBundle cachedAssetBundle, uint crc);

返回值:UnityWebRequest

参数:

uri:AssetsBundle包的网络地址:(可以是本地file:)

crc:0,如果不为0,将会进行校验

version:一个整数版本号

hash:一个版本散列

cachedAssetBundle:用于将给定版本的AssetBundle下载到自定义缓存路径的结构

⑵处理上一步的UnityWebRequest

用DownloadHandlerAssetBundle.GetContent()方法

public static AssetBundle GetContent(Networking.UnityWebRequest www);

www:就是上一步处理的UnityWebRequest

AssetBundle:返回值类型

例子

  1. IEnumerator InstantiateObject()
  2. {
  3. string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;
  4. UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
  5. yield return request.Send();
  6. AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
  7. GameObject cube = bundle.LoadAsset<GameObject>("Cube");
  8. GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
  9. Instantiate(cube);
  10. Instantiate(sprite);
  11. }

六、完整例子

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.IO;
  5. using UnityEngine.UI;
  6. using UnityEngine.Networking;
  7. public class NewBehaviourScript : MonoBehaviour {
  8. Image image1;
  9. Image Image2;
  10. void Start () {
  11. image1 = GameObject.Find("Image (1)").GetComponent<Image>();
  12. Image2 = GameObject.Find("Image (2)").GetComponent<Image>();
  13. StartCoroutine(InstantiateObject());
  14. StartCoroutine(InstantiateObjects());
  15. }
  16. //一个包有多个资源
  17. IEnumerator InstantiateObjects()
  18. {
  19. //texture是一个文件夹,里面放了多张图片
  20. string uri = "file:///" + Application.dataPath + "/AssetsBundles/texture";
  21. UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri, 0);
  22. yield return request.Send();
  23. AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
  24. Object[] obj = bundle.LoadAllAssets(typeof(Sprite));
  25. Sprite[] sprite = new Sprite[obj.Length];
  26. for (int i = 0; i < obj.Length; i++)
  27. {
  28. sprite[i] = obj[i] as Sprite;
  29. }
  30. this.gameObject.GetComponent<Image>().sprite = sprite[0];
  31. image1.sprite = sprite[1];
  32. //string path = Application.dataPath + "/AssetsBundles/texture";
  33. //AssetBundle assetbundle = AssetBundle.LoadFromFile(path, 0, 0);
  34. //yield return assetbundle;
  35. //if (assetbundle == null)
  36. //{
  37. // print("加载Bundle为空");
  38. //}
  39. //加载类型为sprite的图片,否则一张图片会加载成两个
  40. //Object[] obj =assetbundle.LoadAllAssets(typeof(Sprite));
  41. //Sprite[] sprite = new Sprite[obj.Length];
  42. //for (int i = 0; i < obj.Length; i++)
  43. //{
  44. // sprite[i] = obj[i] as Sprite;
  45. //}
  46. //this.gameObject.GetComponent<Image>().sprite = sprite[0];
  47. //image1.sprite = sprite[1];
  48. }
  49. //一个包有一个资源
  50. IEnumerator InstantiateObject()
  51. {
  52. //用UnityWebRequest读取
  53. //string uri = "file:///" + Application.dataPath + "/AssetsBundles/gress";
  54. //UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri, 0);
  55. //yield return request.Send();
  56. //AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
  57. //GameObject cube = bundle.LoadAsset<GameObject>("gress");
  58. //Sprite sprite = bundle.LoadAsset<Sprite>("gress");
  59. //this.gameObject.GetComponent<Image>().sprite = sprite;
  60. //用AssetBundle读取
  61. string path = Application.dataPath + "/AssetsBundles/gress";
  62. AssetBundle assetbundle = AssetBundle.LoadFromFile(path, 0, 0);
  63. yield return assetbundle;
  64. if (assetbundle == null)
  65. {
  66. print("加载Bundle为空");
  67. }
  68. Sprite sprite = assetbundle.LoadAsset<Sprite>("gress");
  69. Image2.sprite = sprite;
  70. }
  71. // Update is called once per frame
  72. void Update () {
  73. }
  74. }

七、AssetBundle Manager管理工具

AssetBundle Manage是一个管理AssetBundle的工具,在官方资源商店寻找

文档说明

https://docs.unity3d.com/Manual/AssetBundles-Manager.html

下载地址

https://www.assetstore.unity3d.com/en/#!/content/45836

AssetBundle Manager是一个由Unity制作的工具,它可以使AssetBundle更加高效。

下载并导入AssetBundle Manager包不仅增加了加载和使用AssetBundle的新API,而且还添加了一些编辑器功能来简化工作流。这个功能可以在Assets菜单选项下找到。

八、备注

1、基于平台的加载AssetBundle方法

AssetBundle.LoadFromMemoryAsync

AssetBundle.LoadFromFile

WWW.LoadfromCacheOrDownload

UnityWebRequest DownloadHandlerAssetBundle(Unity 5.3 or newer)

方法:https://docs.unity3d.com/Manual/AssetBundles-Native.html

2、一些知识点网址

Unity5.X新版AssetBundle使用方案及策略

http://www.cnblogs.com/jiangshuai52511/p/6437239.html

Unity5新的AssetBundle系统使用心得

http://blog.csdn.net/langresser_king/article/details/44208585

[Unity热更新]unity5中的assetbundle

http://blog.csdn.net/lyh916/article/details/49815871

3、下面的方法未经过测试,先记录下来,待以后查询

(1)、为需要打包到AssetBundle中的资源设置其assetBundleName,有两种方式可以实现这个功能:一是手动在编辑界面对资源一一进行手动设置;二是遍历需要设置的资源目录,通过代码动态设置。显然第二个办法更加方便,具体的步骤如下:

a.遍历要打包的资源目录,找到需要打包的预设或者资源;

b.设置资源的assetBundleName属性;

c.通过AssetDatabase.GetDependencies(stringpath)方法逐个找到资源的依赖资源路径;

d.使用AssetDatabase.AssetPathToGUID(stringpath)计算出每个资源的唯一ID,然后将此ID当做assetBundleName赋予每个依赖资源;

e.调用BuildPipeline.BuildAssetBundles(stringoutputPath)打包到指定位置。

(2).资源加载:

由于依赖关系存在于manifest中,所以加载资源之前,需要先加载manifest文件。

转载于:https://www.cnblogs.com/cyct/p/10664059.html

unity当前项目里面AssetBundle和加载的方法总结相关推荐

  1. Unity最新版打包AssetBundle和加载的方法

    一.设置assetBundleName 二.构建AssetBundle包 三.上传AssetBundle到服务器 四.把AssetBundle放到本地 五.操作AssetBundle 六.完整例子 七 ...

  2. unity保存加载慢_掌握Unity 5中的保存和加载功能

    unity保存加载慢 Thanks to Vincent Quarles for kindly helping to peer review this article. 感谢Vincent Quarl ...

  3. Oracle项目OBIEE11G ---结构和加载

    1.OBIEE11G的逻辑结构 这个结构图基本上可以说明问题 WeblogicDomain 是BIEE的发布容器,同时为了支持第三方开发集成了J2EE的模块, 其中可以看到 其中的 RTD (实时决策 ...

  4. Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解

    Unity资源机制 1.概述 本文意在阐述Unity资源机制相关的信息,以及一些关于个人的理解与试验结果.另外还会提及一些因机制问题可能会出现的异常以及处理建议.大部分机制信息来源于官方文档,另外为自 ...

  5. 关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法

    问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查 ...

  6. unity保存游戏数据_在Unity中保存和加载玩家游戏数据

    unity保存游戏数据 In this tutorial, we'll learn to implement Save/Load game functionality in our game. We ...

  7. Unity项目打开闪退 提示”Unity 已存在 您无法加载相同的版本“

    最近从unity hub打开项目的时候总是闪退回hub 可以新建新的项目打开,但是一旦关闭后,再次从hub打开就闪退 闪过提示" Unity 已存在 您无法加载相同的版本 " 然后 ...

  8. 正确使用AssetBundle加载和卸载

    在使用Unity开发项目时,AssetBundle是必须使用的,对资源进行打包加载,因为移动端游戏包体的大小对用户体验非常重要,对内存的使用更加重要,下面我们就介绍一下关于AssetBundlle的使 ...

  9. AssetBundle加载和卸载

    https://blog.csdn.net/qq_33337811/article/details/73849019 转载 Unity5的AssetBundle管理(加载.卸载) 一.获取AssetB ...

最新文章

  1. python3 numpy array_python 3和numpy数组
  2. SQL必知必会——插入数据(十五)
  3. 解决虚拟机能ping通宿主机,而宿主机不能ping通虚拟机
  4. 使用客户端对象模型读取SharePoint列表数据
  5. 相机成像原理_【科研进展】动态虚拟相机:探索三维视觉成像新方法
  6. mysql root 注入_sql注入入门之mysqlroot权限下的注入利用方式
  7. Python之list每个元素小数点精度控制
  8. linux7.1安装教程,Debian Linux 7.1.0 图文安装教程
  9. ROS的学习(六)理解ROS的节点(NODE)
  10. cordova与android通信_使用Cordova插件实现两个app之间的相互调用和通讯
  11. 小程序影藏溢出的gif_动图制作方法,1分钟教会你如何制作gif表情包!
  12. 2018年蓝桥杯省赛 明码
  13. JAVA——电子商城三级分类目录查询-递归树形数据结构
  14. ssm框架体检管理系统源码+文档
  15. An Adaptive Stochastic Dominant Learning Swarm Optimizer for High-Dimensional Optimization 阅读笔记
  16. L.G.ALEXANDER 访谈录(ZT)
  17. ads的项目下的文件全部消失不见了
  18. oracle求字段中指定字符串出现个数
  19. 泰拉瑞亚服务器插件注册,泰拉瑞亚服务器 House 圈地教程(Tshock 插件)
  20. Recyclerview数据显示错乱完全解析

热门文章

  1. 【游戏开发渲染】Unity ShaderGraph使用教程与各种特效案例:Unity2022(持续更新)
  2. Unity5.0 天空盒(CubeMap)
  3. 3 什么是linux磁盘分区,3. Linux系统磁盘分区介绍
  4. 计算机专业创新创业点,计算机专业学生创新能力培养
  5. CentOS8.1启动时出现Failed to start Switch Root错误如何解决?
  6. [Android]Android studio编译程序时报错: error: use of undeclared identifier ’free free(t);
  7. LLumar龙膜官宣品牌代言人——虚拟偶像「昤珑」
  8. 下载Win10系统和在VM虚拟机中配置完成
  9. Formal Verification (一) 形式验证的分类、发展、适用场景
  10. Android Twitter 分享---官方Fabric方式