【问题标题】:How to swap cubemap when game environment changes游戏环境变化时如何交换立方体贴图
【发布时间】:2015-12-02 12:03:43
【问题描述】:

我是一个团结的新手,需要一点帮助......

我有两种不同的环境可供用户选择。我为每个环境生成了一个立方体贴图。当用户切换环境时,我需要换掉场景中反映的立方体贴图。这里有一些想法:

  1. 为所有资产创建 2 个材质,并在运行时分配材质,当场景发生变化时。我遇到的问题是这些是拥有大量资产的大型场景。在不必遍历场景中的每一个对象的情况下,我该如何做呢?

  2. 找到一种在用户切换环境时动态重新分配立方体贴图的方法。也许循环遍历所有场景材质以寻找一个立方体贴图的存在,然后用另一个替换它。

似乎这就是我能想到的全部,我倾向于#2。只是好奇它是否会导致性能下降。谁有更好的建议?

【问题讨论】:

  • 如果您使用 2 种材料相互替代,那么您可以只使用 1 种并不断切换立方体贴图...?我答对了吗?

标签: c# unity3d


【解决方案1】:

使用上面的概念 #2...

// replaces the reflection cubemap for the selected environment (garage or gallery)
public void setReflectionMaps(Cubemap cubeMap) 
{
    // get all of the  mesh renderers
    var renderers = truckGO.GetComponentsInChildren<Renderer>();
    foreach (Renderer r in renderers) {
        // get the material for each renderer
        Material mat = r.sharedMaterial;

        // check if the material has a cubemap
        if (mat.HasProperty("_ReflectionMap")) {
            // replace existing cubemap
            mat.SetTexture("_ReflectionMap",cubeMap);
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多