2016-06-18 2 views
0

개체 참조가 개체 인스턴스에 전송되지 않습니다. 내 코드는 S ceneFader.instance.LoadLevel("Gameplay"); 입니다. 내 새 2D 안드로이드 게임에 사용하고 있습니다. MainMenuController.cs에 대한스크립트 인스턴스가 null을 반환합니다.

내 전체 코드는

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class MainMenuController : MonoBehaviour { 

    [SerializeField] 
    private Button musicBtn; 

    [SerializeField] 
    private Sprite[] musicIcons; 

    // Use this for initialization 
    void Start() { 
     CheckToPlayTheMusic(); 
    } 

    void CheckToPlayTheMusic(){ 
     if (GamePreferences.GetMusicState() == 1) { 
      MusicController.instance.PlayMusic (true); 
      musicBtn.image.sprite = musicIcons [1]; 
     } else { 
      MusicController.instance.PlayMusic (false); 
      musicBtn.image.sprite = musicIcons [0]; 
     } 

    } 

    public void StartGame(){ 
     GameManager.instance.gameStartedFromMainMenu = true; 
     //Application.LoadLevel ("Gameplay"); 
     SceneFader.instance.LoadLevel("Gameplay"); 
    } 

    public void HighscoreMenu(){ 
     Application.LoadLevel ("HighScoreScene"); 


    } 

    public void OptionsMenu(){ 
     Application.LoadLevel ("OptionsMenu"); 
    } 


    public void QuitGame(){ 
     Application.Quit(); 

    } 


    public void MusicButton(){ 
     if (GamePreferences.GetMusicState() == 0) { 
      GamePreferences.SetMusicState (1); 
      MusicController.instance.PlayMusic (true); 
      musicBtn.image.sprite = musicIcons [1]; 
     } else if (GamePreferences.GetMusicState() == 1) { 
      GamePreferences.SetMusicState (0); 
      MusicController.instance.PlayMusic (false); 
      musicBtn.image.sprite = musicIcons [0]; 
     } 

    } 

} 

모든 신체가 문제의 동일한 종류를 '입니까?

을 사용하여 UnityEngine을 확인하십시오. using System.Collections;

공용 클래스 SceneFader : MonoBehaviour {

public static SceneFader instance; 

[SerializeField] 

private GameObject fadePanel; 

[SerializeField] 
private Animator fadeAnim; 

// Use this for initialization 
void Awake() { 
    MakeSingleton(); 
} 

void MakeSingleton(){ 
    if (instance != null) { 
     Destroy (gameObject); 
    } else { 
     instance = this; 
     DontDestroyOnLoad (gameObject); 

    } 

} 

public void LoadLevel(string level){ 
    StartCoroutine (FadeInOut (level)); 
} 

IEnumerator FadeInOut (string level){ 
    fadePanel.SetActive (true); 
    fadeAnim.Play ("FadeIn"); 

    yield return StartCoroutine (MyCoroutine.WaitForRealSeconds (1f)); 

    Application.LoadLevel (level); 
    fadeAnim.Play ("FadeOut"); 

    yield return StartCoroutine (MyCoroutine.WaitForRealSeconds (.7f)); 

    fadePanel.SetActive (false); 

} 

}

+0

오류가 표시되는 곳 (오류 과거 복사)과 같은 정보를 추가하십시오. – matiaslauriti

+0

제목을 변경하지 않아서 닫을 수 없도록 변경했습니다. 그렇게하면 중복되기 때문에 제목으로 오류를 사용하지 마십시오. 당신은'SceneFader.instance.LoadLevel' 라인에서 충돌한다고했습니다. 추가 도움을 얻기 위해'SceneFader' 스크립트를 게시하십시오. – Programmer

+0

아마도 장면을 빌드에 추가하지 않았을 수 있습니다. 그것은 흔히 잊어 버리는 오류입니다. – matiaslauriti

답변

0

문제는 싱글 톤 예정이다. SceneFader의 인스턴스는 없습니다.

변경 :

void MakeSingleton(){ 
    if (instance != null) { 
     Destroy (gameObject); 
    } else { 
     instance = this; 
     DontDestroyOnLoad (gameObject); 
} 

void MakeSingleton(){ 
    if (instance != null && instance != this) { 
     Destroy (gameObject); 
    } else { 
     instance = this; 
     DontDestroyOnLoad (gameObject); 
} 

로 문제를 해결해야한다. 이 문제가 계속 발생하면 프로젝트에서 싱글 톤을 제거해야합니다. GetComponent라는 것이 있습니다. 그것을 사용하여 SceneFader 스크립트의 인스턴스를 가져옵니다.

SceneFaderObj이라는 GameObject를 만들고 편집기에서 SceneFader 스크립트를 첨부하십시오. SceneFader 스크립트에서 모든 싱글 톤 코드를 제거하는 것을 잊지 마십시오. 당신의 MainMenuController 스크립트 이제

,

SceneFader screenFader; 
void Start() { 
    //Find the SceneFaderObj GameObject 
    GameObject tempObj = GameObject.Find("SceneFaderObj"); 
    //Get the SceneFader script instance that is attached to SceneFaderObj 
    screenFader = tempObj.GetComponent<SceneFader>(); 
} 

그런 다음 SceneFader 스크립트에서 함수를 호출 할 수 screenFader를 사용할 수 있습니다. MusicControllerGamePreferencesGameManager 스크립트와 같은 다른 스크립트에 대해 동일한 작업을 수행하십시오.

+0

미안하지만이 모든 작업을 수행 한 후에도 같은 오류가 발생합니다. 다른 모든 작업은 훌륭하게 작동합니다. 게임을 시작하려면 클릭 할 때만 오류가 발생합니다. –

+0

@XiaurrehmanXee ** "죄송하지만이 모든 일을 한 후에 같은 오류가 있습니다."** 모든 것을 할 필요는 없습니다. if (instance! = null) {'을 if (instance! = null && instance! = this) {'로 변경하면됩니다. 그것이 작동하지 않는다면 당신은 제 대답의 두 번째 부분을 가지고 다시해야합니다. 몇몇 새로운 유니티 사용자들은 바로 정적으로 사용합니다. 당신은 이것에 문제가있을 것이다. 단순히'GetComponent'를 사용하고 모든'정적'물건을 제거하십시오. 네가 그렇게 할 수 없다면 나는 더 이상 도울 수 없어. 다른 모든 것들이 잘 작동하는지 여부는 중요하지 않습니다. – Programmer

관련 문제