【发布时间】:2015-12-22 07:29:36
【问题描述】:
如何在运行时隐藏/显示地形和其他游戏对象(通过 C# 代码)?
我想以淡入/淡出的方式显示/隐藏地形和游戏对象
【问题讨论】:
-
要获得“淡入/淡出”样式,您需要一个着色器。您能否告诉我们您为什么要这样做,这可能有助于给您一个适当的答案。
-
您使用什么材质/着色器?标准?
如何在运行时隐藏/显示地形和其他游戏对象(通过 C# 代码)?
我想以淡入/淡出的方式显示/隐藏地形和游戏对象
【问题讨论】:
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
【讨论】:
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);
}
}
}
【讨论】: