【问题标题】:Change JS script in Unity so it changes scenes在 Unity 中更改 JS 脚本以更改场景
【发布时间】:2015-07-03 14:02:23
【问题描述】:

我有我正在使用的 JavaScript 代码,它在我的 Unity 游戏中创建了一个暂停菜单。这是一个简单的暂停菜单,显示“主菜单”和“退出游戏”按钮。

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

【问题讨论】:

标签: unity3d


【解决方案1】:

暂停菜单脚本:

#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;
            }
        }
    }
}

【讨论】:

  • 谢谢,看起来不错,唯一的问题是:Assets/Pause Menu/PauseMenu.js(2,20): BCE0018: The name 'string' does not mean a valid type ('not found ')。您是说“UnityEngine.Networking.NetworkSystem.StringMessage”吗?
  • 非常感谢,效果很好!既然您似乎对此了解很多,您是否曾在 Unity 游戏中添加过移动控件?你是怎么做到的?现在,当我在我的 Android 平板电脑上测试游戏时,按钮可以工作,但我无法控制汽车。有没有办法在不更改默认物理的情况下控制玩家(统一标准资产中的 carcontroller.cs)。非常感谢!
  • 嗯,让我看看这个,但是我注意到里面有一件看起来你不好看的东西。您正在谈论具有 .cs 扩展名(c# 文件)的脚本,但是此暂停脚本位于 javascript 中。这些语言不能在同一个项目中互换使用,选择一种并坚持下去。如果您想使用 c#,我可以为您将此脚本转换为 c#
  • 如何将 JavaScript 转换为 C#?我需要手动执行此操作还是有此程序?谢谢!
  • 有一些程序可以解决这个问题,但它们并不总是有效,因此您需要知道要转换为的语言以修复程序所犯的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
相关资源
最近更新 更多