【问题标题】:Cannot cast from source type to destination type iterating transform无法从源类型转换为目标类型迭代转换
【发布时间】:2014-04-17 04:14:33
【问题描述】:

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

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

  }
}

发生了什么事? (第一次发帖,如有错误请见谅)

【问题讨论】:

    标签: c# debugging unity3d


    【解决方案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);
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多