【问题标题】:When is a referenced texture actually loaded?什么时候实际加载引用的纹理?
【发布时间】:2014-11-23 22:02:15
【问题描述】:

我有一个脚本附加到一个引用纹理的游戏对象。

游戏对象在开始时未启用,所以我的问题是:

纹理何时实际加载到内存中?何时启用游戏对象或何时加载场景?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    你可以测试一下。您创建一个带有脚本的游戏对象,将纹理的引用作为公共变量并禁用该游戏对象。然后,您创建另一个游戏对象,它也有一个脚本,并尝试访问另一个脚本中对纹理的引用。例如。我用预制件做了一个小测试。

    游戏对象 1,已禁用并附有此脚本:

    using UnityEngine;
    using System.Collections;
    
    public class ScriptOne : MonoBehaviour
    {
        // reference to the prefab/texture
        public GameObject prefab;
    
        // Not called since the object is disabled
        // will be called as soon as gameobject 1 gets enabled
        private void Awake()
        {
            Debug.Log("prefab: " + prefab);
        }
    }
    

    Gameobject 2,已启用并附有此脚本:

    using UnityEngine;
    using System.Collections;
    
    public class ScriptTwo : MonoBehaviour
    {
        // Reference to gameobject 1
        public GameObject other;
    
        private void Awake()
        {
            Debug.Log("other: " + other.GetComponent<LoadOrderTest>().prefab);
        }
    }
    

    这将导致控制台中的有效输出(其他:...)。

    如果您之所以问这个问题是因为您希望仅在需要时才加载它们(如果确实需要,以节省内存),那么您必须在运行时使用 Awake 或 OnEnable 中的“Resources.Load”加载它们.

    【讨论】:

    • 我曾考虑过以这种方式进行测试,但我立即认为可能有一个特殊的 texture2d/texture 条件可以在 get-er 中实现实际负载。我就是这样做的,也许提供一个特殊的选项来在场景开始时加载。 @Gunnar B.
    • 也许这回答了你的问题answers.unity3d.com/questions/720471/…
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2012-09-02
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多