【问题标题】:Hide/show terrain programmatically以编程方式隐藏/显示地形
【发布时间】:2015-12-22 07:29:36
【问题描述】:

如何在运行时隐藏/显示地形和其他游戏对象(通过 C# 代码)?
我想以淡入/淡出的方式显示/隐藏地形和游戏对象

【问题讨论】:

  • 要获得“淡入/淡出”样式,您需要一个着色器。您能否告诉我们您为什么要这样做,这可能有助于给您一个适当的答案。
  • 您使用什么材质/着色器?标准?

标签: c# unity3d terrain


【解决方案1】:

Terrain 脚本默认使用内置着色器。这个是不可访问或不可修改的。

Material mat = terrain.materialTemplate;
Debug.Log(mat==null); // True

分配自定义着色器仅限于自然着色器,并且没有提供颜色的使用。一般来说,地形似乎忽略了着色器的颜色。

    Material mat = terrain.materialTemplate;
    Color c = mat.color;
    c.a = 0.5f;  
    mat.color = c;

这将以着色器颜色显示修改,但对地形本身没有影响。

因此,您必须创建自己的着色器,例如 http://wiki.unity3d.com/index.php/TerrainTransparency

【讨论】:

    【解决方案2】:
    public class ChangeAlpha : MonoBehaviour {
    public Renderer Renderer;
    private Material _material;
    
    // Use this for initialization
    void Start () {
        _material = Renderer.material;
        StartCoroutine("ChangeAlphaSlowly");
    }
    
    private IEnumerator ChangeAlphaSlowly()
    {
        var increaseAmount = 0f;
        var _color = new Color(0, 0, 1, 0);
        for (int i = 0; i < 10; i++)//ten step 
        {
            increaseAmount += 0.1f;
            _material.color = new Color(0, 0, 1, increaseAmount);          
            yield return new WaitForSeconds(0.1f);
        }
    
    }
    

    }

    【讨论】:

    • 即使在飞机上也没有工作
    • 您可以使用画布和画布组的 alpha 属性在相机上显示/隐藏效果。如果我想通过淡入/淡出方式显示和隐藏场景中的所有游戏对象,我会使用这种方式。抱歉,我想帮你。
    猜你喜欢
    • 2017-07-06
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2016-07-21
    相关资源
    最近更新 更多