精华内容
下载资源
问答
  • unity打包出现 Failed to re-package resources unity打包出现 Failed to re-package resources 在对新项目打包发布的时候出现报错提示 这个问题我搜了很多博客都没有答案,最后自己改设置发现怎么做了。 其实是...

    unity打包出现 Failed to re-package resources

    unity打包出现 Failed to re-package resources

    在对新项目打包发布的时候出现报错提示Failed to re-package resources
    在这里插入图片描述
    在这里插入图片描述
    这个问题我搜了很多博客都没有答案,最后自己改设置发现怎么做了。
    其实是因为unity里面你设置的安卓API最小等级错了。
    在edit>>buildSetting>>playerSetting->安卓页面->otherSeting>>miniAPIlevel设置为你要用的API等级,把下面那个Target API level设置为 highest installed,就可以了。
    在这里插入图片描述
    测试发现我这个方法创建新项目可以,但是老项目还是会报错,可能是写入了项目里面某个文件。
    QAQ低级的错误!!!

    展开全文
  • Unity3DGameResource, Unity3D assetbundle resources API
  • Unity内部加载Resources

    2019-08-01 17:32:49
    Unity Resources文档中有这样几句话: 1.The Resources class allows you to find and access Objects including assets. 2.All assets that are in a folder named "Resources" anywhere in the Assets folder ...

    在Unity Resources文档中有这样几句话:

    1.The Resources class allows you to find and access Objects including assets.

    2.All assets that are in a folder named "Resources" anywhere in the Assets folder can be accessed via the Resources.Load functions. Multiple "Resources" folders may exist and when loading objects each will be examined.

    3.In Unity you usually don't use path names to access assets, instead you expose a reference to an asset by declaring a member-variable, and then assign it in the inspector

    4.Some loaded assets, most notably textures, can use up memory even when no instance exists in the scene. To reclaim this memory when the asset is no longer needed, you can use Resources.UnloadUnusedAssets.

    大概意思是:
    Resources可以访问Assets文件夹中任何位置名为“Resources”的文件夹中的所有资产(注意:文件夹名字必须命名Resources)。在Unity中,您通常不使用路径名来访问资产,而是通过声明成员变量来公开对资产的引用,然后在检查器中分配它。在一些加载的资源中,比如:纹理,即使场景中不存在实例,也会耗尽内存。当我们不再需要资产时回收此内存,可以使用Resources.UnloadUnusedAssets。

    总结下来就是:

    1.Resources类只能读取Assets下名为“Resources”的文件夹里的资源。

    2. Unity打包发布时,只有Resources文件夹里的资源在会被打入包中

    3. Resources类加载资源时,使用”Resources”文件夹开始的相对路径,且不包含资源的扩展名

    Resources提供的方法

    public static Object[] FindObjectsOfTypeAll(Type type);
    public static T[] FindObjectsOfTypeAll<T>() where T : Object;
    public static Object GetBuiltinResource(Type type, string path);
    public static T GetBuiltinResource<T>(string path) where T : Object;
    public static Object Load(string path);
    public static Object Load(string path, Type systemTypeInstance);
    public static T Load<T>(string path) where T : Object;
    public static Object[] LoadAll(string path);
    public static Object[] LoadAll(string path, Type systemTypeInstance);
    public static T[] LoadAll<T>(string path) where T : Object;
    public static Object LoadAssetAtPath(string assetPath, Type type);
    public static T LoadAssetAtPath<T>(string assetPath) where T : Object;
    public static ResourceRequest LoadAsync(string path);
    public static ResourceRequest LoadAsync(string path, Type type);
    public static ResourceRequest LoadAsync<T>(string path) where T : Object;
    public static void UnloadAsset(Object assetToUnload);
    public static AsyncOperation UnloadUnusedAssets();

    游戏中常用到的方法:

    Resources.Loadstring path);

    Resources.Load(string path, Type systemTypeInstance);

    Resources.Load<T>(string path) where T : Object

    Resources.UnloadAsset(Object assetToUnload);

    Resources.UnloadUnusedAssets();

     

    比如我们想加载Resourses文件下的某个资源,我们就可以用

    Resources.Loadstring path);

    Resources.Load(string path, Type systemTypeInstance);

    Resources.Load<T>(string path) where T : Object

    public Texture GetTexture(string texName)
    {
            Texture tex = Resources.Load<Texture>(string.Format("Textrue/{0}", texName));
    
            return tex;
    }
    

    Resources.UnloadAsset (Object assetToUnload)方法

    Unloads assetToUnload from memory.This function can only be called on Assets that are stored on disk.If there are any references from game objects in the scene to the asset and it is being used then Unity will reload the asset from disk as soon as it is accessed.
    大概意思是:该方法是从内存中卸载,只能在存储在磁盘上的资产上调用此函数,如果场景中的游戏对象有任何对资源的引用并且正在使用它,那么Unity将在访问后立即从磁盘重新加载资源。

    比如:游戏中常用的音效需要我们去管理释放,这个时候我们就可以使用UnloadAsset方法。

    尝试运行下面代码:

    void Start()
    {
         var go = Resources.Load<GameObject>("Prefabs/Nliki");
         Resources.UnloadAsset(go);
    
    }
    

    运行之后会发现报错:

    UnloadAsset may only be used on individual assets and can not be used on GameObject's / Components or AssetBundles.UnityEngine.Resources:UnloadAsset(Object)

    大概意思意识是:

    UnloadAsset只能用于个别的资产,不能用于GameObject的/组件(Components)或资产包(AssetBundles)。

    private GameObject _go;
    private Texture _tx;
    void Start()
    {
            var go = Resources.Load<GameObject>("Prefabs/Nliki");
            //Instantiate函数实例化是将对象的所有子物体和子组件完全复制,成为一个新的对象。这个新的对象拥有与源对象完全一样的东西,包括坐标值等。
            this._go = Instantiate(go);
            var ts = Resources.Load<Texture>("Texture/nvtoufa_01");
            this._tx = ts;
            this._go.GetComponent<Renderer>().material.mainTexture = ts;
            StartCoroutine(WaitForUnLoadAsset(10.0F));
    
    }
    
    //协同程序(Coroutines)
    IEnumerator WaitForUnLoadAsset(float waitTime)
    {
            yield return new WaitForSeconds(waitTime);
            Debug.Log("------Resources.UnloadAsset-----");
            Resources.UnloadAsset(this._tx);
    }
    

    (*简单说一下上面的协同程序,面试的时候可能会问及相关知识,什么是协同及协同程序中是否能访问Unity中的对象,方法或者组件等问题,我这里说一下其他方面的问题:调用 StartCoroutine() 会产生少量的垃圾,因为 Unity 会创建管理该协程的类,如果我们的游戏是交互的,并且性能上令人担忧,那么使用 StartCoroutine() 的时候就要限制下了,为了减少这个函数带来的垃圾,任何在性能关键时候运行的协程函数都应该提前运行,并且我们要特别小心要是调用嵌套调用的 StartCoroutine(),协程中 yield 语句本省并不会申请堆内存,但是 yield 语句传递值可能会创建不必要的堆内存,比如装箱(值类型转化为引用类型)或创建新的对象(new),如果循环固定使用yield频繁创建new对象,我们可以 WaitForSeconds delay=new  WaitForSeconds(固定时间) )

    运行上述代码,可以对比内存使用情况:

    Resources.UnloadAsset之前的内存Textures

    Resources.UnloadAsset之后的内存Textures

    场景前后变化:

    总结下:

    Resources.UnloadAsset(Object)卸载非 GameObject类型的资源,会将内存中已加载资源及其克隆体卸载。

    Destroy(Object):仅用于卸载GameObject类型的资源的克隆体。

    DestroyImmediately(Object):卸载GameObject类型的资源,会将内存中已加载资源及其克隆体卸载,但该方法只能用在非编辑模式下,否则会报错提示改为DestroyImmediately(Object, true),然而编辑模式下使用该函数会连文件夹里的原始Asset一并删除。

    Resources.UnloadUnusedAssets() 

    该函数是卸载未使用的资产(所以上诉图中现象并不会出现)。如果在遍历整个游戏对象层次结构(包括脚本组件)之后未达到资产,则认为该资产未使用。还检查静态变量。但是,不会检查脚本执行堆栈,因此将仅卸载从脚本堆栈中引用的资产,并在必要时在下次使用其某个属性或方法时加载回来。这需要额外注意已在内存中修改的资产。确保在触发资产垃圾收集之前调用EditorUtility.SetDirty

    官方推荐我们使用Resources.UnloadUnusedAssets(),但是Resources.UnloadUnusedAssets有个缺点,就是遍历查找资源会消耗和费时间,这就会导致我们不能频繁的调用该函数;假如一旦资源一直被全局变量引用,就会导致一直无法释放;尤其是对粒子系统这种依赖重复特别高的资源。

    在正常规模的游戏中,一般使用Resources.UnloadUnusedAssets都会导致卡顿,导致这样的原因并不是回收Asset本身的卡顿,而是因为这个方法不允许回收在Mono代码里存在引用的资源,要做到这点必须先执行一次Mono的GC——把GC卡顿的老毛病带了过来。我们可以在Resources.UnloadUnusedAssets之后执行GC.Collect()。

     

    Resources.FindObjectsOfTypeAll(Type type)

    可用于定位编辑器中的资产和场景对象。该函数可以返回被加载,包括游戏对象,组合屋,材料,网格,纹理等,还列出内部的东西任何类型的统一性对象的。

    void OnGUI()
    
    {
    
        var list = Resources.FindObjectsOfTypeAll<UnityEngine.GameObject>();
        foreach (var ob in list) {
    
           GUILayout.Label("GameObject :" + ob.name);
    
        }
    
    }
    
    

    (*又要多说了,在 Unity 5.5版本之前,foreach 循环遍历数组以外的内容都会产生垃圾。这是装箱导致的。System.Object 在循环开始时创建,在循环结束后丢弃。这个问题在 Unity 5.5 已修复。)

    运行结果:

                          

    展开全文
  • unity动态加载Resources.Load方法

    万次阅读 多人点赞 2016-04-08 09:46:25
    Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹,这个命名是U3D规定的方式,然后把资源文件放进去,当然也可以在Resources中再创建子文件夹,代码加载时需要添加相应的...

    Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹,这个命名是U3D规定的方式,然后把资源文件放进去,当然也可以在Resources中再创建子文件夹,代码加载时需要添加相应的资源路径。

    下面是一个简demo,两个预设场景,Cube和scene,其中Cube放在Resource中的Prebs中,而scene放在Resources跟目录下,而Herarchy面板里没有这两个场景。

    具体看下图:更多内容请关注微信公众号:unity风雨路

    下面实现Resources.Load资源的加载。
    代码如下:

     

    using UnityEngine;
    using System.Collections;
    
    
    
    public class LoadResDemo : MonoBehaviour
    {
    
        private string cubePath = "Prebs/Cube";
        private string spherePath = "scene";
        void Start()
        {
            //把资源加载到内存中
            Object cubePreb = Resources.Load(cubePath, typeof(GameObject));
            //用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载
            GameObject cube = Instantiate(cubePreb) as GameObject;
    
            //以下同理实现scene的动态实例化
            //把资源加载到内存中
            Object scene = Resources.Load(spherePath, typeof(GameObject));
            //用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载
            GameObject aa = Instantiate(scene) as GameObject;
            Debug.Log(aa+"sss");
        }
    
    }

    这样把脚本绑定到Herarchy面板的相机上运行就可以实现动态加载了。

    如图:

     

    声明:

    上面的方法在unity5.3.2f1版本中使用会出错(上面方法版本忘记了但一定是unity5.3.2f1之前的版本)。所以后来的方法换成了这种(如下代码):

     GameObject vrgiftsall = Resources.Load("Prefab/VR/biggiftsvr")as GameObject;
     GameObject biggiftvrload = Instantiate (vrgiftsall) as GameObject;

    
     

    上述代码中biggiftsvr是放在下路径为Resources/Prefab/VR的一个物体,随便定义个GameObject用来加载过来,然后再实例化为biggiftvrload ,所以你要使用的真正的GameObject是biggiftvrload 。

     

    ------------------------------------------------------------------------------------------

     

    下面讲如何加载图片(Texture)并转为sprite.用的依旧是unity5.3.2f1版本。

     

    如下面代码:

    1.在Resources目录下有ic_heng_touxiangda这张sprite,首先用Texture2D的方式加载到aa上。

    2.然后再定义一个Sprite将Textrue2D转为sprite。Sprite.Create()这个方法括号里第一个参数是一张Texture2D图片,第二个是生成sprite的Rect(也就是位置和大小),第三个是生成的pivot位置(中心点)。

    3.之后将sprite(也就是下面的kk)赋值给一个Image组件上就 OK。

     Texture2D aa = (Texture2D)Resources.Load("FullScreenfild/ic_heng_touxiangda") as Texture2D;
     Sprite kk = Sprite.Create(aa, new Rect(0, 0, aa.width, aa.height), new Vector2(0.5f, 0.5f));
     UIinit.CAVA.transform.FindChild("Panel/head_portrait_bg/head_portrait/Image").GetComponent<Image>().sprite = kk;

     

     

     

     

     

    或者是下面方法:(注意Resources的路径中是不能有下划线的不然是无法识别的)

     this.GetComponent<Image>().sprite = Resources.Load<Sprite>("78");
      this.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("78");

     

     

    展开全文
  • UNITY 5.2 Resources

    2015-10-20 21:43:58
    描述: 该类能查找和使用对象, Resources.FindObjectsOfTypeAll 能定位资源和场景对象 ...在UNITY开发中,一般不用路径名来操作资源,而是通过声明一个成员变量在 inspector 赋值某个资源的引用。
    描述:
    该类能查找和使用对象, Resources.FindObjectsOfTypeAll 能定位资源和场景对象

    所有包含在 Assets文件夹下中的 Resources 文件夹中的资源都能被 Resources.Load 访问,若存在多个 Resources 则会自动检查。

    在UNITY开发中,一般不用路径名来操作资源,而是通过声明一个成员变量在 inspector 赋值某个资源的引用。如果运用这种技术,UNITY能够自动的计算哪些资源是被用的当完成创建时,如果直接将资源放在 Resources 目录下则会将所有资源打包进游戏。

    另外一个不好的地方就是,当脚本特别指定严格的代码来获取资源的路径时,代码的重用性很低。在 inspector 中暴露引用的方式对于使用该脚本的用户来说是很直接有效的。
    然后还是有一些情况不应该使用 inspector  暴露引用的方式给对象赋值,比如 动态的创建对象 和 赋值纹理时。

    一些已经加载的资源(尤其是纹理)会一直占用内存,即使场景中没有对象。当这些资源不再使用,为了回收这些内存,可以调用Resources.UnloadUnusedAssets 回收这些资源。


    Static函数:

    public static T[] FindObjectsOfTypeAll<T>() where T : Object;
    public static Object[] FindObjectsOfTypeAll(Type type);

    说明:这个函数会返回所有已经加载的对象数组,还返回内部的对象,所以小心使用该数组。

    与Object.FindObjectsOfType 不同,不可用的对象也会列举在内


    public static Object Load(string path);
    public static T Load<T>(string path) where T : Object;
    public static Object Load(string path, Type systemTypeInstance);
    说明:加载 Resources  文件夹总路径为 path 的资源,systemTypeInstance 指定对象类型,否则为努力了,不使用扩展名

    public static Object[] LoadAll(string path);
    public static T[] LoadAll<T>(string path) where T : Object;
    public static Object[] LoadAll(string path, Type systemTypeInstance);
    说明:加载 Resources  文件夹总路径为 path 的资源,若 path 为文件夹则加载该文件夹下所有的资源,若为文件则只返回该资源文件指定的对象,systemTypeInstance 指定对象类型。

    public static ResourceRequest LoadAsync(string path);
    public static ResourceRequest LoadAsync<T>(string path) where T : Object;
    public static ResourceRequest LoadAsync(string path, Type type);
    说明:异步加载 Resources 文件夹中 path 下的资源,当资源被加载完成时能被重新获取则返回 ResourceRequest。 只有指定类型的资源才会被返回

    public static void UnloadAsset(Object assetToUnload);
    说明:卸载内存中的资源,仅用于保存在硬盘上的资源,如果还有对象引用该资源,则会被重新加载

    public static AsyncOperation UnloadUnusedAssets();
    说明:卸载未使用的资源
    展开全文
  • Unity_Resources:针对在Unity中进行编程的人员的资源和教程列表
  • UnityAPI.Resources资源 版本 作者 参与者 完成日期 备注 UnityAPI_Resources_V01_1.0 严立钻   2018.10.19 ...
  • AssetsAssets文件夹是unity项目中放置游戏资源...ResourcesUnity允许你按需动态加载游戏资源到场景中。Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取Resources.LoadAssetAtPath() :它可以读取A...
  • 本篇文章讨论了Unity中的Resources系统。通过Resources系统,开发者可以将Asset资源放在一个或多个名为Resources的文件夹中,并且在运行时利用ResourcesAPI来加载或卸载这些Asset中的Object。一、预加载文件位置我们...
  • 一些小的数据,您可以使用txt文字作为一种媒介,被收购、变速箱、更改、记忆力。...一,Unity3d Resources.Load 载入获取数据。 TextAsset TXTFile = (TextAsset)Resources.Load("Data/board"+ boardN.To...
  • Unity Resources的几个方法

    千次阅读 2017-09-17 19:52:22
    Resources 资源Resources类允许你从指定的路径查找或者访问资源所有资源必须在项目Assets文件内的任意Resources文件夹中,可以通过Resources.Load()访问,允许有多个Resources文件夹,每次加载对象是会自动检查,,
  • Unity3D资源加载Resources

    千次阅读 2019-06-29 14:24:44
    Unity3D资源加载Resources 目录 1、博客介绍 2、内容 3、推送 4、结语 1、博客介绍 本篇博客对资源加载类Resources做一个介绍 2、内容 FindObjectsOfTypeAll 返回一个该类型对象的列表 Load 从...
  • Unity文档——Resources文件夹

    千次阅读 2018-07-26 11:53:49
    这是关于Unity 5中资产,资源和资源管理的系列文章的第3章。 本章讨论资源系统。这个系统允许开发人员在一个或多个名为Resources的文件夹中存储Assets,并使用Resources API 在运行时从这些Assets加载或卸载对象...
  • Unity3d Resources TextAsset 文本 一些小型数据,可以用txt文本作为媒介,进行获取、传输、修改、存储; 比如:User1.2.3.txt,放入 Resources/Data 文件下; 一,Unity3d Resources.Load 加载获取...
  • 初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源而一般AssetBundle...
  • Unity资源管理(二)-Resources文件夹

    万次阅读 2018-06-01 19:45:55
    Unity资源管理(二)-Resources文件夹 参考文献:https://unity3d.com/cn/learn/tutorials/topics/best-practices/resources-folder 本篇文章讨论了Unity中的 Resources 系统。通过Resources系统,开发者可以...
  • Unity Resources类型的资源因为简单易用的特点,使其非常适合用于快速开发原型。本文分享对此类Resources资源的随机化加密方案
  • Unity3D Resources TextAsset 文本

    千次阅读 2016-01-27 15:55:34
     一些小型数据,可以用txt文本作为媒介,进行获取、传输、修改、存储;...一,Unity3d Resources.Load 加载获取数据。  TextAsset TXTFile = (TextAsset)Resources.Load("Data/board" + boardN.ToString() +
  • Unity资源加载的方式有: 1.脚本拖拽(本地) 2.Resources加载(本地) ★ ...ResourcesUnity下的特殊文件夹,使用需自行创建Resources文件夹(命名必须正确) 使用Resources文件夹就需要用到Resources...
  • https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and-resources?playlist=30089 A guide to AssetBundles and Resources 第二部分 Resources文件夹 这部分讨论Res...
  • Unity最佳实践-Resources文件

    千次阅读 2018-06-11 23:21:00
    原文地址:https://unity3d.com/cn/learn/tutorials/topics/best-practices/resources-folder?playlist=30089 本章讨论了Resources系统,这个系统可以让开发者使用一个或者多个名为Resources的文件夹保存资产,...
  • 今天读了The Resources folder这一章,一点总结 Unity建议不要使用有三点原因: 1、内存占用巨大 2、增加应用启动时间和打包时间 3、降低多平台能力(推荐AssetBundle) 除了以下情况: 1、游戏前期快速开发...
  • Unity3D】Unity3D之 Resources.Load 动态加载资源  1.Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹,这个命名是U3D规定的方式(这里必须有这么一个文件夹,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,302
精华内容 920
关键字:

resourcesunity