我正在摆弄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);
}
}
发生了什么事? (第一次发布在这里顺便说一句,抱歉,如果我做错了什么)
答案 0 :(得分:1)
尝试此修改只是为了解决您的错误:
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);
}
}
}
}