2017-03-06 58 views
2

我无法弄清楚这个问题,我删除然后重新编辑PlayTab对象,但它不再起作用......它告诉我它没有被分配,但它是我的知识。 Unity编程相对较新,任何帮助都很棒,下面的脚本。统一变量尚未分配错误

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.Audio; 
public class MainMenu : MonoBehaviour { 
    public GameObject Buttons; 
    public GameObject CreditsPanel; 
    public GameObject QuitPanel; 
    public GameObject Options; 
    public GameObject PlayTab; 
    public Slider audiosl; 
    public Slider graphicsl; 
    public Toggle fullscreen; 
    public string SceneName; 

void Start(){ 
    QualitySettings.SetQualityLevel (100); 
    //(int)PlayerPrefs.GetFloat("Quality") 
    AudioListener.volume = 100; 
    //PlayerPrefs.GetFloat("Volume"); 
    int qualityLevel = QualitySettings.GetQualityLevel(); 
    audiosl.value = AudioListener.volume; 
    graphicsl.value = qualityLevel; 
} 
void Update(){ 
    Debug.Log ("Update"); 
    AudioListener.volume = audiosl.value; 
    QualitySettings.SetQualityLevel ((int)graphicsl.value); 
} 
public void InGame(bool a){ 
    if (a == true) { 
     Application.LoadLevel (SceneName); 
    } else { 
     //continue 
    } 
} 
public void Play(bool a){ 
    Debug.Log ("Inside Play Function"); 
    if (a == true) { 
     Debug.Log ("Inside If Statment"); 
     PlayTab.SetActive(a); 
     Buttons.SetActive(!a); 
     Animation pl = PlayTab.GetComponent<Animation>(); 
     pl.Play("EnterPlayMenu"); 
    }else { 
     Debug.Log ("Else'd"); 
     PlayTab.SetActive(a); 
    } 

} 
public void ShowMenu(bool a){ 

} 
public void Option(bool a){ 
    if (a == true) { 
     Options.SetActive(a); 
     Buttons.SetActive(!a); 
     Animation Opt = Options.GetComponent<Animation>(); 
     Opt.Play("OptionEnter"); 



    }if (a == false) { 
     Animation d = Buttons.GetComponent<Animation>(); 

     d.Play ("mainbuttonenter"); 
     Options.SetActive (false); 
    } 
    } 


public void Credits(bool a){ 
    if (a == true) { 
     CreditsPanel.SetActive(a); 
     Buttons.SetActive(!a); 
     Animation cr = CreditsPanel.GetComponent<Animation>(); 
     cr.Play("EnterCredits"); 

    }else { 
     CreditsPanel.SetActive(a); 
    } 

} 
public void Quit(bool a){ 
    if (a == true) { 
     QuitPanel.SetActive(a); 
     Buttons.SetActive(!a); 
     Animation q = QuitPanel.GetComponent<Animation>(); 
     q.Play("EnterQuit"); 
    }else { 
     QuitPanel.SetActive(a); 
    } 

} 
public void Exit(bool a){ 
    if (a == false) { 
     Option(false); 
     Buttons.SetActive(true); 
     CreditsPanel.SetActive(false); 
     QuitPanel.SetActive(false); 
     Options.SetActive(false); 

     PlayTab.SetActive(false); 
     saveSettings(); 

    } 
    if (a == true) { 
     Application.Quit(); 
    } 
} 
public void saveSettings(){ 
    PlayerPrefs.SetFloat ("Quality", QualitySettings.GetQualityLevel()); 
    PlayerPrefs.SetFloat ("Volume", AudioListener.volume); 
} 
public void FullScreen(bool a){ 
    if (Screen.fullScreen == a) { 
     Screen.fullScreen = !a; 
    } else { 
     Screen.fullScreen = a; 
    } 
} 

}

+0

你能在Unity Game Object窗格中显示对象绑定的截图吗?它从来没有初始化,或者它在某个时候会失去Playtab状态? –

+0

@SilasReinagel 你是什么意思在检查器中的对象绑定? –

+0

很可能您没有将相关的游戏对象分配给检查器中的PlayTab字段。选择此脚本附加到的对象,并查看PlayTab字段是否包含相关的游戏对象。如果没有,请将其从层次结构拖放到PlayTab字段中。 – pumpkinszwan

回答

1

据我看到的,你只定义playTab变量,但没有分配它。

编辑:

尝试开始显示出来,然后自动通过代码隐藏它。可能Unity不会从一开始就初始化场景中不可见的对象。

+0

但它是一个游戏对象,它附加到适当的游戏对象上。我如何分配它?其他的工作原样... –

+0

哦,对,你的意思是在编辑器。我已经忘记了这种可能性。根据我的经验,Unity有时很奇怪。你检查过这个特定的对象是不是隐藏的吗? –

+0

'隐藏'是什么意思?对不起,我对Unity非常陌生。 –