2015-07-03 46 views
0

我有我正在使用的JavaScript代码,它使我的Unity游戏中的暂停菜单。这是一个简单的暂停菜单,显示“主菜单”和“退出游戏”按钮。在Unity中更改JS脚本,使其改变场景

如何将按钮绑定到Unity中的场景?因此,如果我点击“主菜单”,我希望它带我到scene1,并用音乐按钮替换“退出游戏”按钮打开/关闭我的音乐。

+0

您使用什么UI系统,NGUI,UGUI? –

+0

'Application.LoadLevel(“levelName”)'加载一个新场景。 http://docs.unity3d.com/ScriptReference/Application.LoadLevel.html – Ben

回答

0

暂停菜单脚本:

#pragma strict 
var musicBtnText : String = "Music: On"; 
var musicOn : boolean = true; 
var isPaused : boolean = false; 


function Update() 
{ 
    if(musicOn) 
    { 
     musicBtnText = "Music: On"; 
    } 
    else 
    { 
     musicBtnText = "Music: Off"; 
    } 
    if(Input.GetKeyDown(KeyCode.P)) 
    { 
     isPaused = !isPaused; 
     if(isPaused) 
     { 
      Time.timeScale = 0; 
     } 
     else 
     { 
      Time.timeScale = 1; 
     } 
    } 
} 

function OnGUI() 
{ 
    if(isPaused) 
    { 
     if (GUI.Button(Rect(Screen.width/2-50, 240, 100, 40), "Main Menu")) 
     { 
      Application.LoadLevel("scene1"); 
     } 
     if(GUI.Button(Rect(Screen.width/2-50, 300, 100, 40), "" + musicBtnText)) 
     { 
      musicOn = !musicOn; 
      GameObject.Find("cameraName").GetComponent(AudioListener).enabled = !GameObject.Find("cameraName").GetComponent(AudioListener).enabled; 
     } 
    } 
} 

但是,如果你想落实到自己的代码这一点,有一点要注意的是,在统一制作的按钮时,您包含他们的if语句。这样,只要点击该按钮,就会调用if语句内的任何代码。至于打开和关闭音乐,您将希望启用和禁用主音频监听器,默认情况下该监听器已连接到主摄像机。因此,在我的代码中,当GameObject.Find("cameraName")替换摄像机名称和主摄像机的名称时。最后,通过呼叫Application.LoadLevel("levelName")来完成统一的加载水平。祝你好运!如果这给了你任何错误,我很乐意提供帮助。

在C#:

using UnityEngine; 
using System.Collections; 

public class PauseMenu : MonoBehaviour { 

    public string musicBtnText = "Music: On"; 
    public bool musicOn = true; 
    public bool isPaused = false; 


    void Update() 
    { 
     if(musicOn) 
     { 
      musicBtnText = "Music: On"; 
     } 
     else 
     { 
      musicBtnText = "Music: Off"; 
     } 
     if(Input.GetKeyDown(KeyCode.P)) 
     { 
      isPaused = !isPaused; 
      if(isPaused) 
      { 
       Time.timeScale = 0; 
      } 
      else 
      { 
       Time.timeScale = 1; 
      } 
     } 
    } 

    void OnGUI() 
    { 
     if(isPaused) 
     { 
      if (GUI.Button(new Rect(Screen.width/2-50, 240, 100, 40), "Main Menu")) 
      { 
       Application.LoadLevel("scene1"); 
      } 
      if(GUI.Button(new Rect(Screen.width/2-50, 300, 100, 40), "" + musicBtnText)) 
      { 
       musicOn = !musicOn; 
       GameObject.Find("cameraName").GetComponent<AudioListener>().enabled = !GameObject.Find("cameraName").GetComponent<AudioListener>().enabled; 
      } 
     } 
    } 
} 
+0

谢谢,这看起来不错,唯一的问题是这样的:资产/暂停菜单/ PauseMenu.js(2,20):BCE0018:名称字符串'不表示有效类型('未找到')。你的意思是'UnityEngine.Networking.NetworkSystem.StringMessage'? –

+0

我的不好,只是大写字符串,它应该工作。 –

+0

非常感谢你,很棒!既然你对此很了解,你有没有将移动控件添加到Unity游戏中?你是怎么做到的?现在,当我在我的Android平板电脑上测试游戏时,按钮可以正常工作,但我无法控制汽车。有没有办法在不改变默认物理(统一标准资产中的carcontroller.cs)的情况下控制玩家。十分感谢! –