对象引用未发送到对象的实例
我的代码是S ceneFader.instance.LoadLevel("Gameplay");
我正在将它用于我的新的2d安卓游戏。
我的MainMenuController.cs完整代码是'
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];
}
}
}
任何机构都有同样的问题吗?
请查看scenefader脚本
使用UnityEngine; 使用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 :(得分: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>();
}
然后,您可以使用screenFader
调用SceneFader
脚本中的函数。为您的其他脚本执行相同的操作,例如MusicController
和GamePreferences
以及GameManager
脚本。