用C#设定材料颜色

时间:2015-04-22 15:05:59

标签: c# unity3d monodevelop

我正在UNITY开展游戏。到目前为止,对于这个游戏,我有3个我希望定位的立方体。我将它们设置在一个数组中,当我按Tab键时,目标会根据距离在它们之间切换。这一切都很好,但我遇到了泡菜,我希望我的目标立方体变为红色以进行视觉表现。我在Youtube上看到人们使用了以下代码行:

selectedTarget.renderer.material.color = Color.red;

然而,这对我不起作用。然后我看到一条评论说: 不推荐使用渲染函数。下面应该工作......

selectedTarget.GetComponent<Renderer>().material.color = Color.red;

此代码对我也不起作用。我不会错过任何错误,它运行良好,但立方体不会变红。有没有人知道我这样做是否合适?我将在下面发布整个脚本,我所在的代码在selectedTarget()中。任何帮助将不胜感激,谢谢!

private void SelectTarget(){
    selectedTarget.renderer.material.color = Color.red;
}

3 个答案:

答案 0 :(得分:0)

我遇到了非常非常相同的问题。我没有错。您需要能够在材质上设置颜色属性,并且只有CERTAIN着色器具有此颜色属性。我不得不使用例如Self-Illuminated / Bumped而不是Mobile / VertexLit。然后更改颜色应该没问题,因为您可以在编辑器/检查器中看到Main Color属性。

还要确保您的网格物体具有材质。如果您没有材料,即使它是空白的,也不是占位符,否则它将无法工作!我创造了一种纹理,最好是白色,小的,像5x5。然后将纹理附加到您的立方体。贴上它后就可以上色了!

我在使用Color.Lerp的游戏中做了很酷的事情,它会从一种颜色淡化到另一种颜色!当玩家被敌人击中表示伤害时,下面的示例将乒乓球从白色拨到红色!

transform.renderer.material.color = Color.Lerp(Color.white, Color.red, Mathf.PingPong(Time.time * 3 * speedLerp, 1.0));

答案 1 :(得分:0)

这对我有用。

using UnityEngine;
using System.Collections;

public class Tile : MonoBehaviour {
    public Vector2 gridPos = Vector2.zero;
    Renderer r;
    public Color colorStart = Color.red;
    public Color colorEnd = Color.green;
    public float duration = 1.0F;
    private float lerp;

    // Use this for initialization
    void Start () {
        r = GetComponent<Renderer>();
        lerp = Mathf.PingPong(Time.time, duration) / duration;
    }

    // Update is called once per frame
    void Update () {
    }

    void OnMouseEnter()
    {
        r.material.color = Color.Lerp(colorStart, colorEnd, lerp);
        //r.material.color = Color.black;
        Debug.Log("X pos = "+ gridPos.x + "Y pos = "+ gridPos.y);
    }

    void OnMouseExit()
    {
        r.material.color = Color.Lerp(Color.white, Color.white,lerp);
    }
}

答案 2 :(得分:-2)

设置颜色的bool类型,如

bool colorchange = false;

{{1}}