【问题标题】:Making a gradient and change colors based on that gradient in Unity3D - C# Script在 Unity3D 中制作渐变并根据该渐变更改颜色 - C# 脚本
【发布时间】:2016-12-03 05:06:42
【问题描述】:

我希望能够使用 C# 脚本创建一个颜色渐变条,看起来像这样:

然后我想说如果我的数字在范围内 (0.8 - 1.0) 使我的对象成为渐变中显示的红色阴影。

我不确定如何处理这个问题。现在我只有两种纯色。我有:

myGameObject.GameComponent<Renderer>().material.color = Color.red;

表示正值,蓝色表示负值。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# unity3d colors gradient


    【解决方案1】:

    Unity's Gradient class。您可以创建GradientColorKey[]GradientAlphaKey 的列表 - 并设置每个颜色/时间值。为了您的目的,我会使用:

        Gradient g = new Gradient();
        GradientColorKey[] gck = new GradientColorKey[2];
        GradientAlphaKey[] gak = new GradientAlphaKey[2];
        gck[0].color = Color.red;
        gck[0].time = 1.0F;
        gck[1].color = Color.blue;
        gck[1].time = -1.0F;
        gak[0].alpha = 0.0F;
        gak[0].time = 1.0F;
        gak[1].alpha = 0.0F;
        gak[1].time = -1.0F;
        g.SetKeys(gck, gak);
        myGameObject.GameComponent<Renderer>().material.color = g.Evaluate(1);
    

    这将为您提供与g.Evaluate() 中的数字相对应的Color,因此您应该将g.Evaluate(1) 中的时间参数更改为变量或您想要的任何内容。如果您获得透明或黑色纹理,请尝试更改gak 中的alpha 值。希望这会有所帮助:)

    【讨论】:

    • 什么是阿尔法?我的时间可以是任何数字吗? (例如在 -6000 到 6000 之间?)
    • 另外,它似乎没有通过渐变。只是看起来在颜色之间闪烁。除非我的更改不够显着,无法看到
    • @2222 Alpha 是纹理的“透明度”。不幸的是,我不确定相对 alpha 应该是多少。也许尝试将gck[1].time 设置为0 而不是负1,并将gak[0] 设置为1.0F? Gradient 是用来迭代颜色的,所以它应该能够做你想做的事,虽然我自己没有太多经验。
    • 还是谢谢你。我的意思是我在这里也看到了这段代码docs.unity3d.com/ScriptReference/Gradient.html,但我会尝试不同的方法来看看它是否会起作用。我的意思是我觉得它应该可以工作。:/
    • 嘿,这是一个相当晚的回复,但我发现代码有什么问题。参数“时间”实际上是从 0-1 (0-100%) 浮动的百分比。任何大于 1 的都被限制在 1,任何小于 0 的都被限制在 0。所以对于这个解决方案,红色应该是 1,蓝色应该是 0。评估调用也使用相同的百分比,浮点数从 0-1。所以任何更大或更小的东西都会导致 1 或 0。
    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多