无法从源类型转换为目标类型迭代转换

时间:2014-04-16 18:20:10

标签: c# debugging unity3d

我正在摆弄C#中的日/夜循环脚本,我正在制作。 我不知道它是否有任何好处,我只是在C#中尝试,因为我是新手。 我想我在这里有一个相当不错的代码,在我测试游戏之前,Debug没有说什么。当我测试它时,它会说:

  

InvalidCastException:无法从源类型转换为目标   类型。 cycleFlow.DayNightCycle()(在Assets / Scripts / cycleFlow.cs:28)   cycleFlow.Update()(在Assets / Scripts / cycleFlow.cs:14)

这就是我所拥有的:

using UnityEngine;
using System.Collections;

public class cycleFlow : MonoBehaviour {

  private Color night;
  private Color day;

  void Start () {

    night [0] = 30;
    night [1] = 30;
    night [2] = 30;

    day [0] = 255;
    day [1] = 255;
    day [2] = 255;

  }

  void Update () {
    DayNightCycle ();
  }

  void DayNightCycle()
  {

    foreach (SpriteRenderer child in transform)
      if(Input.GetKeyDown(KeyCode.Q))
        child.color = Color.Lerp(child.color, night, Time.deltaTime);

    foreach (SpriteRenderer child in transform)
      if(Input.GetKeyDown(KeyCode.E))
        child.color = Color.Lerp(child.color, day, Time.deltaTime);

  }
}

发生了什么事? (第一次发布在这里顺便说一句,抱歉,如果我做错了什么)

1 个答案:

答案 0 :(得分:1)

尝试此修改只是为了解决您的错误:

foreach (SpriteRenderer child in transform.GetComponentsInChildren<SpriteRenderer>())

更进一步,我会尽量记住帧率。如果可以从Start函数中删除这些渲染器,则可能需要这些渲染器。另外,我会将if(Input.GetKeyDown(KeyCode.E))移到你的循环之外,而不是在里面。

编辑:回到这一点,我也注意到你只是按下按键,而不是按下按键的所有时间。 (请参阅GetKeyDownGetKeyGetKeyUp之间的区别。您可以尝试这样的事情:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class cycleFlow : MonoBehaviour
{

  private Color night;
  private Color day;
  private IEnumerable<SpriteRenderer> childSpriteRenderers;

  void Start ()
  {
    night = new Color(30, 30, 30);
    day = Color.white;

    childSpriteRenderers = transform.GetComponentsInChildren<SpriteRenderer> ();
  }

  void Update ()
  {
    DayNightCycle ();
  }

  void DayNightCycle ()
  {
    if (Input.GetKey (KeyCode.Q))
    {
      foreach (SpriteRenderer child in childSpriteRenderers)
      {
        child.color = Color.Lerp (child.color, night, Time.deltaTime);
      }
    }

    if (Input.GetKey (KeyCode.E))
    {   
      foreach (SpriteRenderer child in childSpriteRenderers)
      {
        child.color = Color.Lerp (child.color, day, Time.deltaTime);
      }
    }
  }
}