Unity场景切换+退出程序方法合集 详细版

详细版适合新手,脚本均从别的文章复制而来,现在自己会写了,这篇博客就当做纪念,不删了。

(一)进度条切换场景

效果图:

①新建两个场景,分别改名为Scene0和Scene1。(添加场景:鼠标右键→Create→Scene)

②新建一个Canvas,创建一个Quad把想要的背景图片拖上去,创建Test(用于显示进度)、Iamge(用于显示进度条),调整大小和位置。

将一张白色图片(其它图片也可以)拖到Unity上,再设置image。

把image的Texture Type改成Sprite(2D and UI),然后把图片拖到image上

继续设置如图

Image Type(图片显示类型)改为 Filled(填充的)

Fill Method(填充方式)改为 Horizontal(水平填充)

Fill Amount(填充比例):0是完全不显示,1是完全显示。

②新建脚本(Visual Studio),改名为LoadScene(鼠标右键→Create→C#Script)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LoadScene : MonoBehaviour
{
    public Text loadingText;
    public Image progressBar;
    private int curProgressValue = 0;

    void FixedUpdate()
    {
        int progressValue = 100;

        if (curProgressValue < progressValue)
        {
            curProgressValue++;
        }

        loadingText.text = $"正在努力加载游戏资源...{curProgressValue}%";//实时更新进度百分比的文本显示  

        progressBar.fillAmount = curProgressValue / 100f;//实时更新滑动进度图片的fillAmount值  

        if (curProgressValue == 100)
        {
            loadingText.text = "OK";//文本显示完成OK
            SceneManager.LoadScene("Scene1");
        }
    }
}

把脚本LoadScene拖拽到相机Main Camera,为脚本中的---赋值如图

调整相机位置。

(二)按钮切换场景

①在场景中创建一个button,新建一个场景Scene2

②新建脚本,改名为ChangeScene

using UnityEngine;
using System.Collections;
using UnityEngine.UI;//注意这个不能少
public class ChangeScene : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {

        GameObject btnObj = GameObject.Find("开始游戏");//"开始游戏"为你的Button的名称
        Button btn = btnObj.GetComponent<Button>();
        btn.onClick.AddListener(delegate ()
        {
            this.GoNextScene(btnObj);
        });
    }

    // Update is called once per frame
    void Update()
    {
    }

    public void GoNextScene(GameObject NScene)
    {
        Application.LoadLevel("Scene2");//切换到场景Scene2
    }
}

第23行Application.LoadLevel("Scene_2");//切换到场景Scene2 可能会报过时。要修改一下,改为SceneManager.LoadScene("Scene_2");//切换到场景Scene2; 引用也要增加。第3行后面加入using UnityEngine.SceneManagement;能用就将就用

 //第八行GameObject btnObj = GameObject.Find("Button");Button需要改为你的Button名称

//第二十三行Application.LoadLevel("Scene2");Scene2需要改为你的场景名称

效果图

(三)按钮切换场景 简单版(效果与二一样)

在场景中创建一个button,把脚本Choose挂在button上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Choose : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        this.GetComponent<Button>().onClick.AddListener(OnClick);
    }

    void OnClick()
    {
        SceneManager.LoadScene("Scene");//Scene为我们要切换到的场景
    }

    // Update is called once per frame
    void Update()
    {

    }
}

只需要将脚本第十八行  SceneManager.LoadScene("Scene");  中的Scene改为你的button名称

(四)按钮切换场景

①添加一个button,新建一个脚本StartScript。

using UnityEngine;
using System.Collections;

public class StartScript : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    //之所以要如此复杂写一个函数接口,是因为UGUI事件函数需要。
    //理论上是可以直接写 public void OnStartGame(){Application.LoadLevel("Game");}
    //但这样一、不规范,二、脚本的复用性大大降低,如果这里有N个地方要实现场景撤换,那么则会有N个脚本
    //所以要这样写,我也不想弄这样的函数接口!-_-!
    public void OnStartGame(string sceneName)
    {
        Application.LoadLevel(sceneName);
    }
}

第23行Application.LoadLevel(sceneName);可能会报过时。要修改一下,改为SceneManager.LoadScene(sceneName); 引用也要增加。第3行后面加入using UnityEngine.SceneManagement;能用就将就用

②创建一个空物体GameObject(在Hierarchy面板上右键鼠标→Create Empty)

把脚本拖拽给空物体,设置button事件如图所示

☆重复利用性高,多个button只需要设置button事件,不需要写好几个脚本

效果图

(五)退出程序按钮

①添加一个button,再添加一个脚本CloseScript

using UnityEngine;
using System.Collections;

public class CloseScript : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    //这里还是无参数的,因为关闭游戏本身就不需要任何参数,好嘛-_-!
    public void OnCloseGame()
    {
        Application.Quit();
    }
}

②把脚本赋予一个空物体GameObject

③设置按钮事件如图

Unity中实现退出游戏功能

我们要实现在编辑器环境下退出编辑器,在非编译器环境下退出游戏

提问

回答

使用预处理判断当前的环境

常用的预处理标识符

标识符 解释
UNITY_EDITOR 只在编辑器中编译
UNITY_ANDROID 只在安卓下编译
UNITY_IPHONE 只在苹果系统下编译
UNITY_STANDALONE_OSX 专门为Mac OS(包括Universal,PPC和Intelarchitectures)平台的定义
UNITY_STANDALONE_WIN 只在Windows系统下编译


 

设置EditorApplication的isPlaying属性为false即可退出编辑器模式

调用Application的Quit()方法即可退出程序

代码

public void ExitGame()
    {
        //预处理
#if UNITY_EDITOR    //在编辑器模式下
        EditorApplication.isPlaying = false;
#else
        Application.Quit();
#endif
    }

猜你喜欢

转载自blog.csdn.net/weixin_57362299/article/details/117906120
今日推荐