【问题标题】:How to make game object transparent in unity如何使游戏对象统一透明
【发布时间】:2013-10-21 07:49:25
【问题描述】:

在我的游戏中,如果玩家在游戏过程中与特定对象发生碰撞,我想通过在运行时编写脚本使玩家对象透明 2 秒...有可能吗?

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

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

    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

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

    【讨论】:

    • Unity 不允许您修改 Color.a 的值。您必须使用临时变量。
    • 这有点老套。
    【解决方案2】:

    试试这个扩展方法:

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

    【讨论】:

      【解决方案3】:

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

      *请注意,这是一个硬修复,我不确定您是否可以使用代码更改它。

      **这是为滚动球的边界而设计的,包括球员跳跃功能。需要使墙壁不可见,但也需要能够碰撞以阻止空中生成的玩家对象

      【讨论】:

      • 如果其他对象使用该对象可能会搞砸,最好创建一个新着色器来执行此操作并关闭网格渲染器的所有附加功能。
      【解决方案4】:

      只需使用着色器即可完成,您可以在运行时快速有效地更改它

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多