运行模式之引用资源

Unity在打包时会删除未引用的资源,但Resources目录下的资源会被强制打包。Resources.Load<T>()用于动态加载资源,建议避免场景直接引用以减小游戏包体。删除对象时,可使用Destroy()或DestroyImmediate(),而删除资源后需调用Resources.UnLoadUnusedAssets()释放无用资源。
摘要由CSDN通过智能技术生成

我们都知道当我们打包时,Unity会自动的删除没有引用的资源,通常只有Resources和StreamingAssets两个文件夹下的资源。

如果一个场景被加入到Scenes In Build ,那么这个场景中在层级面板中的游戏对象都会被都会被打入大游戏包中,比如场景有一个(1)人物模型;

(2)模型中使用了材质A;

(3)材质中使用了贴图B。

这样在打包时已上的资源都会被打包。

但是人物模型如果不是在Resource或者StreamingAssets目录下,这模型是无法使用操作的,因为无法加载这资源。

Resources

在打包时Unity会将所有Resources自动合并在一起,这目录下的资源无论是否有引用关系,都会被强制打包在游戏中,我们可以使用代码动态的操作这些资源。

常用函数:Resources.Load<T>() 用来加载各类的游戏资源

比如 GameObject 

GameObject obj=Resources<GameObject>("A");//对象
Material material=Resources<Material>("Mat");//材质
Sprite sprite=Resources<Sprite>("Logo");//Sprite

小贴士:为了减少包体的体积,我们需要将不需要运行时加载的资源,或者已经废弃掉的资源放进去。我们尽量不要在场景中直接引用Resources中的资源,这样会场景和Resources打包成两份。

删除对象

想要删除游戏对象,Unity为我们提供了两种方法,

(1)GameObject.Destory()  

此方法方法会等一帧再彻底删除,因为可能在这一帧的后面有个地方再操作这个对象(一般推荐这种方法)

(2)GameObject.DestoryImmediate()

此法表示立即删除对象,如果后面一帧有使用该对象的地方会报错

删除资源

当我们删除游戏对象时,它引用的游戏资源并没有被删除掉。

Resources中提供了两种方法来删除游戏资源

Resources.UnloadAsset()
Resources.UnloadUnusedAssets()
//我们可以使用者两种方法来强制的删除游戏资源

因为卸载游戏资源时异步操作,因此我们可以使用IsDone来判断是否完成。

在删除掉游戏对象后,我们使用Resources.UnLoadUnusedAssets()来释放掉没有用的游戏资源

示例代码:

    public GameObject prefab;
    public AsyncOperation m_Async;
	void Start () {
        GameObject.Destroy(prefab);
        //Resources.UnloadAsset(prefab);//强制卸载资源
        m_Async = Resources.UnloadUnusedAssets();
    }
    void Update () {
        //卸载时异步操作,我们在Undate中去判断是否卸载完毕
        if (m_Async!=null)
        {
            if (m_Async.isDone)
            {
                Debug.LogFormat("资源:"+prefab.name+"卸载完成!");
            }
        }
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值