2014-04-16 2 views
1

저는 C#의 주간/야간 순환 스크립트를 사용하여 주변을 둘러보고 있습니다. 그것이 좋은 것인지 전혀 모른다. C#을 처음 접했을 때부터 C#에서 사물을 시도하고있다. 여기 꽤 괜찮은 코드가 있다고 생각합니다. 디버그는 게임을 테스트하기 전에는 아무 말도하지 않습니다. 나는 그것을 테스트 할 때, 그것은 말할 것이다 :소스 유형을 대상 유형 반복 변환으로 변환 할 수 없습니다.

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

    } 
} 

을 무슨 일이야 :

InvalidCastException: Cannot cast from source type to destination type. cycleFlow.DayNightCycle() (at Assets/Scripts/cycleFlow.cs:28) cycleFlow.Update() (at Assets/Scripts/cycleFlow.cs:14)

이 내가 가지고 무엇인가? (처음 BTW 여기 게시, 나는 아무것도 잘못하지 미안 경우)

답변

1

은 오류가 과거를 얻을 단순히이 수정을 시도해보십시오

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

은 더 나아가 나는 마음의 프레임 속도에서 유지하려고 것입니다. Start 함수에서 가능한 경우 이러한 렌더러를 캐싱 할 수 있습니다. 또한 if(Input.GetKeyDown(KeyCode.E))을 내부가 아닌 루프 외부로 옮길 것입니다.

EDIT : 키를 누른 상태에서 항상 키를 누르는 대신 키를 누르는 것뿐입니다. (GetKeyDown, GetKeyGetKeyUp의 차이 참조). 다음과 같이 시도해보십시오.

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); 
     } 
    } 
    } 
} 
관련 문제