如何在Unity中使游戏物体透明

7

我希望在游戏中,如果玩家在游戏过程中与特定物体碰撞,能够通过脚本在运行时将玩家对象的透明度设置为2秒钟……这是否可能?


接受的答案是关于 [tag:C#] 的,所以我将其添加为标签。 - Ruzihm
4个回答

9

检查碰撞。当触发所需的碰撞时,您可以更改透明度。

GameObject g;

// 50% Transparency.
g.renderer.material.color.a = 0.5f; // a is the alpha value.

 // 100% Transparency.
g.renderer.material.color.a = 1.0f;

你可以通过这种方式让你的程序等待一段时间:http://docs.unity3d.com/Documentation/Manual/Coroutines.html
你会注意到这个例子恰好回答了你的问题。

7
Unity 不允许您修改 Color.a 的值,您必须使用一个临时变量。 - Mostafa
这有点不规范。 - 1-14x0r

6

试试这个扩展方法:

public static void ChangeAlpha(this Material mat, float alphaValue)
{
    Color oldColor = mat.color;
    Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaValue);         
    mat.SetColor("_Color", newColor);               
}

您可以通过以下方式调用它:

gameObject.renderer.material.ChangeAlpha( Your Alpha Value );

1
在Unity 5中,使物体不可见的最佳方法是:
  1. 将您想要变为透明的游戏对象的所有材质设置为渲染模式下的透明。
  2. 然后,点击albedo旁边的小圆形按钮,并向下滚动给定项目列表,直到找到一个称为UIMask的项目。
  3. 将其突出显示并按enter键。
*请注意,这是一种固定的方法,我不确定您是否可以通过代码更改此方法。
**这是为roll-a-ball中包含玩家跳跃功能的边界而制作的。我需要使墙壁不可见,但也能够碰撞,以阻止空中飞行的玩家对象。

1
如果其他对象使用该对象,那么更好的方法是创建一个新的着色器来完成此操作,并关闭网格渲染器的所有额外功能,以免出现混乱。 - 1-14x0r

0

这可以通过着色器简单地完成,您可以在运行时快速高效地更改:

  • 创建新的材质并将着色器设置为使用
    Unlit/Transparent Cutout
  • 将您的游戏对象分配给使用这个新材质
  • 关闭游戏对象的所有网格渲染内容:将投射阴影设置为关闭,禁用接收阴影,禁用对全局照明的贡献,关闭光探针和反射,将运动向量设置为“强制无运动”,关闭动态遮挡。
  • 还要记得删除游戏对象的网格碰撞器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接