2015-04-22 66 views
2

我正在UNITY开发一款游戏。对于这个游戏,我有3个立方体,我希望瞄准。我让他们设置在一个数组中,当我点击标签时,目标之间的距离切换。这一切都很好,但我碰到了一个泡菜,而且我希望我的目标立方体变为红色以便视觉呈现。我在Youtube上看到人们使用下面这行代码:用统一的C设置材质颜色#

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

但是这对我不起作用。然后我看到一条评论: 渲染函数已被弃用。下面应该工作...

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

此代码不适用于我。我没有任何错误在意你,它运行良好,但立方体不会变红。有没有人知道我是否在做这件事?我将在后面发布整个脚本,并且我所关注的代码位于selectedTarget()中。任何帮助将不胜感激,谢谢!

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

您确定正在调用SelectTarget吗?你可以用调试器遍历你的代码,或者添加一个简单的['Debug.Log'](http://docs.unity3d.com/ScriptReference/Debug.Log.html)消息,该消息应该显示在你的控制台窗口中。 – rutter

+0

是的,当我运行的游戏,我可以看到他在侧窗改变活动目标:) –

回答

0

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

还要确保您的网格物料。如果你没有材料,即使它是空白或占位符,它也不会工作!我会创建一个纹理,最好是白色的,像5x5一样小。然后将纹理附加到您的多维数据集。附加后,您可以着色!

我在Color.Lerp的游戏中做了很酷的东西,它会从一种颜色褪色到下一种!下面这个例子是当玩家被一个敌人击中指示伤害时,从白色到红色的乒乓。

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

我不能投票你的答案,但需要更多代表,但是我很高兴我不是唯一的,但我不完全明白你的意思,因为我是UNITY的新手抱歉 –

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

设置颜色bool类型等

布尔colorchange = FALSE;

public void OnCollisionEnter (Collision col) 
    { 


      Debug.Log ("collide"); 

      colorchange = true; 

      if (colorchange) { 
        transform.GetComponent<Renderer>().material.color = Color.red; 
      } 
    } 
+1

这里没有必要使用布尔,看起来好像你一碰撞就把它变成“真”。代码可以缩小到'public void OnCollisionEnter(Collision col){transform.GetComponent ().material.color = Color.red; }“它仍然会做同样的事情。 – Tom

相关问题