无法从源类型强制转换为目标类型迭代转换
本文关键字:类型 转换 目标 迭代 | 更新日期: 2023-09-27 17:58:35
我正在用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);
}
}
怎么回事?(第一次在这里发帖顺便说一句,如果我做错了什么,很抱歉)
尝试此修改只是为了克服错误:
foreach (SpriteRenderer child in transform.GetComponentsInChildren<SpriteRenderer>())
更进一步,我会尽量记住帧速率。如果可以的话,可以通过Start
函数缓存这些渲染器。此外,我会将if(Input.GetKeyDown(KeyCode.E))
移动到您的循环之外,而不是内部。
编辑:回到这里,我还注意到你只是在按下键时才采取行动,而不是在按下键的任何时候。(参见GetKeyDown
、GetKey
和GetKeyUp
之间的差异)。你可以试试这样的东西:
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);
}
}
}
}