如何使游戏对象在统一中透明化

时间:2013-10-21 07:49:26

标签: unity3d unityscript

在我的游戏中,如果玩家在游戏中与特定对象发生碰撞,我希望通过在运行时编写脚本让玩家对象透明2秒......是否可能?

5 个答案:

答案 0 :(得分:10)

检查是否有碰撞。当您想要的碰撞被触发时,您可以更改透明度。

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

你会注意到这个例子正好是你的问题。

答案 1 :(得分:4)

试试这个扩展方法:

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 );

答案 2 :(得分:1)

你调用它的对象必须有一个支持透明度的着色器。在Unity5中,使用标准着色器时,必须将其明确设置为" Transparent"能够操纵alpha值。在此处输入图像描述

enter link description here

你也应该清楚,alpha值是一个从0.0f到1.0f的浮点数,所以例如设置

var other : GameObject;
other.renderer.material.color.a = 0.5; // 50 % transparent
other.renderer.material.color.a = 1.0; // 100% visible

将使对象50%透明。

答案 3 :(得分:0)

在Unity 5中,对我有用的最佳方式(使对象不可见)是在渲染模式下将我想要隐藏的所有游戏对象的材质设置为透明。然后单击albedo旁边的小圆形按钮,然后向下滚动给定的项目列表,直到找到一个名为UIMask的项目。突出显示它并按Enter键。我是一个初学者,所以问你是否需要更多的澄清。

*请注意,这是一个难以解决的问题,我不确定您是否可以使用代码更改此内容。

**这是针对包含球员跳跃功能的滚球边界而制作的。需要使墙壁看不见但也可以碰撞阻止空中出生的玩家对象

答案 4 :(得分:0)

只需使用着色器,您就可以在运行时快速高效地进行更改

  • 创建新材质并设置着色器以使用Unlit/Transparent Cutout
  • 分配游戏对象以使用这种新材料
  • 关闭游戏对象的网格渲染中的所有内容:将投射阴影设置为关闭,禁用阴影,将全局照明设置为禁用,关闭光探测器和反射,将运动矢量设置为“不强制动作”,关闭动态遮挡。
  • 也不要忘记删除游戏对象的网格碰撞器