如何在游戏环境发生变化时交换立方体贴图

本文关键字:交换 立方 立方体 体贴 变化 游戏 环境 | 更新日期: 2023-09-27 18:24:56

我是一个团结的新手,需要一些帮助。。。

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

  1. 为所有资源创建2种材质,并在场景更改时在运行时指定材质。我遇到的问题是,这些都是大量资产的大型场景。如果不必遍历场景中的每一个对象,我该怎么做呢。

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

看来这就是我所能想到的,我倾向于#2。只是好奇它是否会引起表演上的轰动。有人有更好的建议吗?

如何在游戏环境发生变化时交换立方体贴图

使用上面的概念#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);
        }
    }
}