Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 在运行时在编辑器vs中创建多个材质_Unity3d - Fatal编程技术网

Unity3d 在运行时在编辑器vs中创建多个材质

Unity3d 在运行时在编辑器vs中创建多个材质,unity3d,Unity3d,我需要同时使用多种材料,它们之间的唯一区别应该是颜色,甚至纹理都是一样的,我必须一个接一个地创建它们,我不知道哪种方法更好,要在编辑器中创建它们并将它们存储在资源中,或者在游戏开始时将它们作为脚本中的临时材料创建,这主要取决于您何时需要它们 我假设你在创业时需要所有这些。在这种情况下: 在运行时实例化它们将使用更多的CPU进行实例化,因此应用程序将需要更多的时间来加载 在编辑器中创建它们将需要静态存储数据,因此应用程序将占用更多内存 如果您在启动时不需要所有这些,您可以开始在后台使用协同程序

我需要同时使用多种材料,它们之间的唯一区别应该是颜色,甚至纹理都是一样的,我必须一个接一个地创建它们,我不知道哪种方法更好,要在编辑器中创建它们并将它们存储在资源中,或者在游戏开始时将它们作为脚本中的临时材料创建,这主要取决于您何时需要它们

我假设你在创业时需要所有这些。在这种情况下:

  • 在运行时实例化它们将使用更多的CPU进行实例化,因此应用程序将需要更多的时间来加载
  • 在编辑器中创建它们将需要静态存储数据,因此应用程序将占用更多内存
如果您在启动时不需要所有这些,您可以开始在后台使用协同程序生成它们

public class MaterialSpawn : MonoBehaviour
{
    private Material[] materials;
    public int amount = 100;

    public static bool IsSpawning = false;
    private void Awake() { StartCoroutine(SpawnYourMaterial()); }

    private IEnumerator SpawnYourMaterial()
    {
        IsSpawning = true;
        int spawned = 0;
        while (spawned < amount)
        {
            //INSTANTIATE YOUR MATERIAL

            spawned++;
            yield return null;
        }

        IsSpawning = false;
    }
}
公共类材料典当:单一行为
{
私人材料[]材料;
公共int金额=100;
公共静态bool IsSpawning=false;
私有void Awake(){start例程(SpawnYourMaterial());}
私有IEnumerator材质()
{
IsPawning=true;
int繁殖=0;
while(繁殖<数量)
{
//实例化你的材料
产生++;
收益返回空;
}
IsSpawning=假;
}
}

感谢您的回复,我认为CPU消耗在我的情况下更为重要,因此我将在资产中创建它们。从性能角度看,差异是可以忽略的。我几乎总是更喜欢代码而不是手工操作,即使只是为了减少错误,让以后更容易更改内容。CPU和内存方面的差异可以忽略不计。我会选择更安全的选择(因此使用内存),以避免不必要的复杂性。除非你正在创造大量的材料(几千?可能不是。很可能是十万?)。在这种情况下,我将使用协同程序实现。但这里我们继续讨论观点。我需要在启动时加载所有材料,所以协同程序对我来说没有用处。最后我写了一些代码,现在材料是从脚本。我这样做是因为自动化,而且我不知道加载场景之前需要多少材料,所以脚本方式更好。目前材料为5种(我知道太少了),但在以后的开发过程中,它们的数量可能会迅速增加。谢谢你的建议