- Home /
Menu Script Problem
This menu script had been working perfectly but for some strange reason that I cannot seem to find, whenever I try to run the script, unity gives me two compiler errors:
NullReferenceException: Object reference not set to an instance of an object
menu.Start () (at Assets/menu.js:50)
and
NullReferenceException: Object reference not set to an instance of an object
menu.VolumeControl () (at Assets/menu.js:196)
menu.ShowToolbar () (at Assets/menu.js:138)
menu.OnGUI () (at Assets/menu.js:113)
Here is the code:
var skin:GUISkin;
private var gldepth = -0.5;
private var startTime = 0.1;
var mat:Material;
private var tris = 0;
private var verts = 0;
private var savedTimeScale:float;
private var pauseFilter;
private var showfps:boolean;
private var showtris:boolean;
private var showvtx:boolean;
private var showfpsgraph:boolean;
var lowFPSColor = Color.red;
var highFPSColor = Color.green;
var lowFPS = 30;
var highFPS = 50;
var start:GameObject;
var url = "unity.html";
var statColor:Color = Color.yellow;
var crediticons:Texture[];
enum Page {
None,Main,Options
}
private var currentPage:Page;
private var fpsarray:int[];
private var fps:float;
function Start() {
fpsarray = new int[Screen.width];
Time.timeScale = 1.0;
pauseFilter = Camera.main.GetComponent(SepiaToneEffect);
PauseGame();
}
function OnPostRender() {
if (showfpsgraph && mat != null) {
GL.PushMatrix ();
GL.LoadPixelMatrix();
for (var i = 0; i < mat.passCount; ++i)
{
mat.SetPass(i);
GL.Begin( GL.LINES );
for (var x=0; x<fpsarray.length; ++x) {
GL.Vertex3(x,fpsarray[x],gldepth);
}
GL.End();
}
GL.PopMatrix();
ScrollFPS();
}
}
function ScrollFPS() {
for (var x=1; x<fpsarray.length; ++x) {
fpsarray[x-1]=fpsarray[x];
}
if (fps < 1000) {
fpsarray[fpsarray.length-1]=fps;
}
}
static function IsDashboard() {
return Application.platform == RuntimePlatform.OSXDashboardPlayer;
}
static function IsBrowser() {
return (Application.platform == RuntimePlatform.WindowsWebPlayer ||
Application.platform == RuntimePlatform.OSXWebPlayer);
}
function LateUpdate () {
if (showfps || showfpsgraph) {
FPSUpdate();
}
if (Input.GetKeyDown("p")) {
switch (currentPage) {
case Page.None: PauseGame(); break;
case Page.Main: if (!IsBeginning()) UnPauseGame(); break;
default: currentPage = Page.Main;
}
}
}
function OnGUI () {
if (skin != null) {
GUI.skin = skin;
}
ShowStatNums();
ShowLegal();
if (IsGamePaused()) {
GUI.color = statColor;
switch (currentPage) {
case Page.Main: PauseMenu(); break;
case Page.Options: ShowToolbar(); break;
}
}
}
function ShowLegal() {
if (!IsLegal()) {
GUI.Label(Rect(Screen.width-100,Screen.height-20,90,20),
"carsimulator3d.blogspot.com");
}
}
function IsLegal() {
return !IsBrowser() ||
Application.absoluteURL.StartsWith("http://www.carsimulator3d.blogspot.com/") ||
Application.absoluteURL.StartsWith("http://carsimulator3d.blogspot.com/");
}
private var toolbarInt:int=0;
private var toolbarStrings: String[]= ["Zoom","Quality","Stats","System","2d/3d"];
function ShowToolbar() {
BeginPage(300,300);
toolbarInt = GUILayout.Toolbar (toolbarInt, toolbarStrings);
switch (toolbarInt) {
case 0: VolumeControl(); break;
case 3: ShowDevice(); break;
case 1: Qualities(); QualityControl(); break;
case 2: StatControl(); break;
case 4: Dimension(); break;
}
EndPage();
}
function ShowBackButton() {
if (GUI.Button(Rect(20,Screen.height-50,50,20),"Back")) {
currentPage = Page.Main;
}
}
function ShowDevice() {
GUILayout.Label ("Unity player version "+Application.unityVersion);
GUILayout.Label("Graphics: "+SystemInfo.graphicsDeviceName+" "+
SystemInfo.graphicsMemorySize+"MB\n"+
SystemInfo.graphicsDeviceVersion+"\n"+
SystemInfo.graphicsDeviceVendor);
GUILayout.Label("Shadows: "+SystemInfo.supportsShadows);
GUILayout.Label("Image Effects: "+SystemInfo.supportsImageEffects);
GUILayout.Label("Render Textures: "+SystemInfo.supportsRenderTextures);
}
function Qualities() {
GUILayout.Label(QualitySettings.names[QualitySettings.GetQualityLevel()]);
}
function QualityControl() {
GUILayout.BeginHorizontal();
if (GUILayout.Button("Decrease")) {
QualitySettings.DecreaseLevel();
}
if (GUILayout.Button("Increase")) {
QualitySettings.IncreaseLevel();
}
GUILayout.EndHorizontal();
}
function Dimension() {
GUILayout.BeginHorizontal();
if (GUILayout.Button("3D View")) {
Camera.main.orthographic = false;
}
if (GUILayout.Button("2D View")) {
Camera.main.orthographic = true;
}
GUILayout.EndHorizontal();
}
function VolumeControl() {
GUILayout.Label("Zoom");
Camera.main.fieldOfView = GUILayout.HorizontalSlider(Camera.main.fieldOfView,100,1.0);
}
function StatControl() {
GUILayout.BeginHorizontal();
showfps = GUILayout.Toggle(showfps,"FPS");
showtris = GUILayout.Toggle(showtris,"Triangles");
showvtx = GUILayout.Toggle(showvtx,"Vertices");
showfpsgraph = GUILayout.Toggle(showfpsgraph,"FPS Graph");
GUILayout.EndHorizontal();
}
function FPSUpdate() {
var delta = Time.smoothDeltaTime;
if (!IsGamePaused() && delta !=0.0) {
fps = 1 / delta;
}
}
function ShowStatNums() {
GUILayout.BeginArea(Rect(Screen.width-100,10,100,200));
if (showfps) {
var fpsString= fps.ToString ("#,##0 fps");
GUI.color = Color.Lerp(lowFPSColor, highFPSColor,(fps-lowFPS)/(highFPS-lowFPS));
GUILayout.Label (fpsString);
}
if (showtris || showvtx) {
GetObjectStats();
GUI.color = statColor;
}
if (showtris) {
GUILayout.Label (tris+"tri");
}
if (showvtx) {
GUILayout.Label (verts+"vtx");
}
GUILayout.EndArea();
}
function BeginPage(width,height) {
GUILayout.BeginArea(Rect((Screen.width-width)/2,(Screen.height-height)/2,width,height));
}
function EndPage() {
GUILayout.EndArea();
if (currentPage != Page.Main) {
ShowBackButton();
}
}
function IsBeginning() {
return Time.time < startTime;
}
function PauseMenu() {
BeginPage(200,200);
if (GUILayout.Button (IsBeginning() ? "Play" : "Continue")) {
UnPauseGame();
}
if (GUILayout.Button ("Options")) {
currentPage = Page.Options;
}
if (IsBrowser() && !IsBeginning() && GUILayout.Button ("Restart")) {
Application.OpenURL(url);
}
EndPage();
}
function GetObjectStats() {
verts = 0;
tris = 0;
var ob = FindObjectsOfType(GameObject);
for (var obj in ob) {
GetObjectStats(obj);
}
}
function GetObjectStats(object) {
var filters : Component[];
filters = object.GetComponentsInChildren(MeshFilter);
for( var f : MeshFilter in filters )
{
tris += f.sharedMesh.triangles.Length/3;
verts += f.sharedMesh.vertexCount;
}
}
function PauseGame() {
savedTimeScale = Time.timeScale;
Time.timeScale = 0;
AudioListener.pause = true;
if (pauseFilter) pauseFilter.enabled = true;
currentPage = Page.Main;
}
function UnPauseGame() {
Time.timeScale = savedTimeScale;
AudioListener.pause = false;
if (pauseFilter) pauseFilter.enabled = false;
currentPage = Page.None;
if (IsBeginning() && start != null) {
start.active = true;
}
}
function IsGamePaused() {
return Time.timeScale==0;
}
function OnApplicationPause(pause:boolean) {
if (IsGamePaused()) {
AudioListener.pause = true;
}
}
Picture of console
picture of inspector
What happens when I play the game:
I click play
when I click play the game pauses and the first compiler error comes up so I unpause it, and the game works.
When I try to press "options" on my menu - the game stops working and the second compiler error comes up
Help me please! Also - I do realise that the camera zoom slider is referred to in the script as "volume control" - its supposed to be like that.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
JavaScript Beginner: Menu Help 2 Answers
Click To Revert to Original Texture else Destroy script help 1 Answer
How to detect clicks from other objects in one script? 2 Answers
Sprint Error script? 2 Answers