unity3d如何更换场景_unity3d 为什么更换场景后 ui交互无效 - CSDN
  • Unity 中场景切换

    2019-01-03 08:16:21
    Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在。如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景场景之间想通过一些画面、动画...

    Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在。如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一些画面、动画表现出一些让玩家期待的东西,大家就要去认真考虑。这篇文章主要介绍两种增加切换中如何播放画面或者动画等等,提高玩家的浸入感,当然你也可以做成无缝的场景

    1 操作基础函数

    LoadLevel Loads the level by its name or index. 
    加载场景,加载之前你需要把场景在Build Settings添加,场景加载后,场景中的激活物体会调用MonoBehavior:OnLevelWasLoaded().使用该方法的时候,之前场景中的物体将会被直接删除。
    LoadLevelAdditive Loads a level additively.
    该方法不销毁当前场景中的物体,新场景中的物体将会被添加进来,这个方法在一些连续加载的场景中非常有用哈。
    LoadLevelAdditiveAsync Loads the level additively and asynchronously in the background.
    在后台异步记载场景
    unity会在后台线程中加载所有的场景资源,这就允许你在加载新场景过程中播放一个进度条或者通过异步加载为玩家创造一个流程的世界
    该方法会返回AsyncOperation结构,结构中isDone表示是否完成,progress给出当前的播放进度。注意的是在编辑器中后台线程的性能要低于游戏中。
    LoadLevelAsync Loads the level asynchronously in the background.
    在后台异步记载场景
    unity会在后台线程中加载所有的场景资源,这就允许你在加载新场景过程中播放一个进度条或者通过异步加载为玩家创造一个流程的世界
    该方法会返回AsyncOperation结构,结构中isDone表示是否完成,progress给出当前的播放进度。注意的是在编辑器中后台线程的性能要低于游戏中。
     

    是否销毁

    LoadLevel和LoadLevelAsync,在加载完成后之后将会立刻销毁原先场景中的物体,而LoadLevelAdditive和LoadLevelAdditiveAsync加载后将会保留原先的场景中的物体,这种方式可以实现无缝融合的场景,只需要你在适当的位置加载后面的场景,不过你还是要考虑资源的释放问题。

    同步还是异步

         异步加载能够获得加载过程的进度和是否加载完成,通过这种方式你可以在切换中增减进度条或者其他表现,这种方式一般通过协程完成:
    public class ExampleClass : MonoBehaviour 
    {
        IEnumerator Start() 
        {
            AsyncOperation async = Application.LoadLevelAsync("MyBigLevel");
            yield return async;
            Debug.Log("Loading complete");
        }
    }
     
    需要注意的是:在使用之前需要在Build Settings添加Scene。
     

    2 切换画面实现方法

    场景切换中实现画面或者动画的方式有很多种,我现在看到的主要有两种,这里大致做下两种方式:

    第一种方式:增加新场景

    增加新场景的方式可以参考雨松的博客:Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一),增加新场景的优点是增加了很多的灵活性,你在中间过渡场景中增加视频播放、图片或者是GUI,缺点就是如果你想在实现通用性,就需要顶层做一些数据辅助,比如加载前的场景中设置好切换时播放的图片到顶层数据管理模块中,在浸入切换场景后在获取这些数据,根据这些数据来切换播放的动画等等。

    左图为测试工程中三个场景,Pre为当前场景,Middle为切换场景,Next是需要加载的场景。右图为middle场景中的存在的物体,挂有实现脚本。案例逻辑:Pre场景中直接进入middle场景,在middle场景中预先加载Next场景,确保新场景加载完之后不会立刻显示Next的场景,而是等待用户的触摸或者点击操作

                        3             4

    具体的操作过程:

    (1)在Pre场景中使用同步加载方法直接进入middle场景,因为Middle场景非常小,所以这个过程会非常快

    Application.LoadLevel("Middle");

    (2)Middle场景的逻辑

    public class NewBehaviourScript2 : MonoBehaviour 
    {
        public     Texture BackImage = null;
        private AsyncOperation async = null;
        void Start () 
        {
            //此物体在下一个场景中不会被销毁
            DontDestroyOnLoad(this);
    
            //开始加载场景
            StartCoroutine("LoadScene");
        }
        
        //异步加载
        IEnumerator LoadScene()
        {
            async = Application.LoadLevelAsync("Next");
            yield return async;
            Debug.Log("Complete!");
        }
    
        void OnGUI()
        {
            //切换场景中的背景,可以是图片或者动画,或者~~
            GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), BackImage);
    
            //加载过程中显示进度,也可以是进度条
            if (async != null && async.isDone == false)
            {
                GUIStyle style = new GUIStyle();
                style.fontSize = 48;
                GUI.Label(new Rect(0, 200, Screen.width, 20), async.progress.ToString("F2"), style);
            }
    
            //在加载结束后,弹出是否下个场景,模拟手游中"触摸任意位置进入游戏"
            if (async != null && async.isDone == true)
            {
                if (GUI.Button(new Rect(100, 100, 100, 100), new GUIContent("跳起进入下一个场景")))
                {
                    Destroy(this);
                }
            }
    
    
        }
    }

    A 场景中添加一个占满全屏的背景图,当然也可以使用动画、视频等,场景加载后马上开始加载下一个场景(异步),根据异步加载进度进行进度条、动画等等进度控制

    B 注意:MiddleObj物体被设置为DontDestroyOnLoad(this),也就是在新的场景中不销毁,即使在新场景加载后也会占满全屏的背景仍然存在,直到物体被销毁

    C MiddleObj物体销毁的方式有两种,一种是手动方式,就像下面代码中使用的,点击Middle场景中的按钮销毁自己 ,另外一种自动方式是在新场景(Next场景)中的MonoBehavior:OnLevelWasLoaded()函数中销毁该物体。

    void OnLevelWasLoaded(int level)
       {
           GameObject obj = GameObject.Find("MiddleObj");
           if (obj != null)
           {
               GameObject.Destroy(obj);
           }
       }

     

    雨松在实现新加载场景中先将场景中的所有物体隐藏,场景切换之后再慢慢的显示出来,而不是通过DontDestroyOnLoad的方式,也是一种办法哈。如果想要把这种方式设计为通用模式,可以增加一个数据管理器,在加载前提前设置好需要的图片、动画资源等内容,OK ,就可以在多个场合使用啦。

    2

    第二种方式使用prefab

    这种方式和第一种方式原理上其实类似,只不过不使用新的场景,而是在Pre场景中增加类似于上面Middle场景中的MiddleObj物体中的逻辑,并且设置为DontDestroyOnLoad。这种方式中可以参考的就是SceneManager场景管理插件,SceneManager的使用可以参考:


         http://blog.csdn.net/onerain88/article/details/12303511

    http://www.haogongju.net/art/2499058

    5           6

    具体使用我就不多说了哈,咱先看看其实现的关键原理:SceneManger使用异步加载新场景,进入加载之后,就会根据选择使用不同的屏幕效果,并且这个效果是不会在新场景中消失的,直到需要的效果目标达到,就会显出出先场景。SceneManger提供了一些列的屏幕效果Prefab以及场景管理方式,很不错的插件哈。      

     

    测试代码下载:http://pan.baidu.com/s/1o67dAiA 密码:l976 ,内带有SceneManager 插件(花15大洋买的)

    细雨标记: unity
     
     
    作者:细雨
     
    转载请注明原文地址:http://www.cnblogs.com/zsb517/p/4113538.html
    展开全文
  • 1.场景转换 : 老版本的场景切换用的是Application.LoadLevel([场景名字或者在File->Build settings里面的场景代号]); 新版本的场景转换用到了SceneManager.LoadScene(); 在()里面添加场景的名字,例如...

    1.场景转换 : 

    老版本的场景切换用的是Application.LoadLevel([场景名字或者在File->Build settings里面的场景代号]);

     

    新版本的场景转换用到了SceneManager.LoadScene();

    在()里面添加场景的名字,例如SceneManager.LoadScene("Main");

    不过在使用SceneManager.LoadScene();的代码进行场景转换的时候,我们需要去添加using指令:using UnityEngine.SceneManagement;

     

    2.场景退出 :

    场景退出还是以前的退出,运用Application.Quit();

     

    不过Application.Quit();的代码在Unity3D中是不好使的,此代码是在手机运行才能好使!

     

     

    本人新手,文章就是自己所学到的,大神勿喷,大家互相帮助才是学习的乐趣!

    转载于:https://www.cnblogs.com/417LDS/p/5973095.html

    展开全文
  • Unity中如何用代码实现场景切换

    千次阅读 2019-09-04 16:25:25
    Unity3D创建游戏可以这么理解,一款完整的游戏就是一个Project(项目工程),游戏中不同的地图对应的是项目下面的不同场景(Scene)。一款游戏可以包含很多地图,因此一个项目工程下面可以保存多个Scene。 创建场景 ...

    Unity中如何用代码实现场景切换


         Unity3D创建游戏可以这么理解,一款完整的游戏就是一个Project(项目工程),游戏中不同的地图对应的是项目下面的不同场景(Scene)。一款游戏可以包含很多地图,因此一个项目工程下面可以保存多个Scene。

    创建场景

         依次点击菜单栏的File—> New Scene即可创建一个新的场景,在场景里面绘制地图(比如添加几个立方体或者球体),然后点击菜单栏的File —> Save Scene(或使用快捷键Ctrl + S)保存它。下面我们就创建2个场景1,2。其中1场景里面有3个立方体,2场景里面有3个球体(内容不重要,能区分场景就OK),保存场景后,项目面板如下:

    在这里插入图片描述

    场景切换

          为了成功切换场景,需要将它们添加到Build Setting面板的Scenes in Build中(点击菜单栏的File —> Build Setting打开面板,面板如图所示(Scene in Build中本来为空,你点击Add Open Scene按钮,依次打开不同场景并添加2个场景,添加后,Scenes In Build中就显示了2个场景的信息,此时就OK啦,不用Build)

    在这里插入图片描述

          在生成游戏时,只有添加到面板的场景才会被编入游戏中。
          接着创建名为ChangeScene的Script脚本用来实现场景跳转(调用的是Application.LoadLevel方法)。代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ChangeScene : MonoBehaviour {
    
      private void OnGUI()
      {
          if(GUI.Button(new Rect(0,0,100,100),"切换"))
          {
              Application.LoadLevel("2");
          }
      }
    }
    

          将该脚本拖拽到第一个场景中,然后运行游戏,点击切换,就可以从场景1切换到场景2。

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Unity3D场景切换

    万次阅读 2016-05-05 20:33:18
    首先新建两个场景:Scene_1与Scene_2 在第一个场景Scene_1中加入UI控件Button,Text设置为“点击切换场景”,名称为默认值“Button” 新建一个脚本,命名为ChangeScene,作为组件添加到Button按钮中: ...

    首先新建两个场景:Scene_1与Scene_2


    在第一个场景Scene_1中加入UI控件Button,Text设置为“点击切换场景”,名称为默认值“Button”


    新建一个脚本,命名为ChangeScene,作为组件添加到Button按钮中:


    在代码中加入点击事件:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;//注意这个不能少
    public class ChangeScene : MonoBehaviour {
        // Use this for initialization
        void Start () {
    
            GameObject btnObj = GameObject.Find("Button");//"Button"为你的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("Scene_2");//切换到场景Scene_2
        }
    }
    
    这样场景切换就成功了,运行结果如下:

    运行Scene_1:

    点击按钮后进入Scene_2:



    展开全文
  • unity3d 设置场景背景

    千次阅读 2013-08-12 11:06:01
    转载地址Scene Background You should create 2 cameras. Name the first one "Main camera", name the second one "Background camera". Create a GUI texture (Gameobject->create other->GUITextture), ...
  • 因此,UGUI的事件设置也是很重要的,下面举个例子来说明,Unity3D中如何进行场景切换、UGUI组件事件、开始游戏与关闭游戏的。如下图所示: 我们将设置2个场景,其中一个场景极其简单,只有
  • 今天博主想和大家分享的是Unity3D场景编辑器的扩展开发,相关的话题我们在Unity3D游戏开发之编辑器扩展程序开发实例这篇文章中我们已经有所涉及,今天博主想特别针对场景编辑器的扩展开发来进行下深入研究。...
  • Unity3D游戏场景优化之批处理

    万次阅读 2015-09-07 10:53:56
    最近开始研究Unity3D游戏场景优化,每次提及游戏优化这个话题的时候,我的脑海中都会浮现出《仙剑奇侠传六》这个让四路泰坦都光荣陨落的神奇游戏,作为一个使用Unity3D引擎进行游戏开发的仙剑玩家,我曾经天真的以为...
  • Unity3D 场景切换

    千次阅读 2018-09-11 10:49:28
    Unity3D中,一个场景在运行中切换到另一个场景的方法 1. 在Unity中 File-&gt;Build Settings-&gt;把要切换的场景添加到Scenes In Build下面,也可以Add Open Scenes,添加完关闭这个页面,不要点 Build ...
  • unity3d 游戏场景切换

    千次阅读 2020-03-13 15:13:43
    LevelSelect using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class LevelSelect : MonoBehaviour { ... // Use this for initializati....
  • Unity3d导出场景地图寻路

    千次阅读 2015-12-04 18:32:54
    Unity3d导出场景地图寻路(金庆的专栏)Unity3d中用无渲染的透明盒子摆出地面和阻档区域。 this.renderer.enabled = false;所有这些盒子设为Navigation Static.阻档盒子Navigation Layer设为 Not Walkable.用...
  • Unity3d场景快速烘焙【2019】

    万次阅读 多人点赞 2019-12-26 19:09:28
    很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,...
  • Unity3D 如何加载场景

    千次阅读 2018-10-23 10:21:10
    unity 如何加载场景unity 加载场景的方式分为 直接加载和动态加载unity arkit 如何加载场景之后变成一个包裹的场景 unity 加载场景的方式分为 直接加载和动态加载 SceneManager.LoadScene(PCLevelName);//直接加载...
  • Unity3d 场景搭建 基础 学习

    千次阅读 2017-09-02 12:08:05
    第一章:Unity环境搭建 所用软件:Unity 5.4.0f3 (64-bit) assets文件夹最重要 Scene场景面板  常用快捷键 1.按下鼠标滚轮拖动场景(或者拖动小手),滑动滚轮缩放场景 2.选择十字标,选定物体,按下F:...
  • Unity3D 制作场景地图 插件

    千次阅读 2017-11-08 21:59:31
    Unity3D 制作场景地图,地图轨迹 插件包。
  • Unity3D无缝场景切换解决方案 - 简单场景切换
  • [Unity3d]场景管理插件-SceneManager

    千次阅读 2014-03-02 18:54:51
    Unity3d中提供了场景Scene的概念,Scene就是一组相关联的游戏对象的一个集合,通常每个集合就是一个场景,但是也有可能只是一个场景的一部分! 场景中的游戏对象是任意的,可以是HUD的UI组件,场景地图,模型等等 ...
  • Unity3d加载场景方法

    千次阅读 2017-12-18 14:09:14
    //通过场景索引号异步加载场景,异步加载即后台加载,加载过程显示的依旧是原场景,也可以设置一个加载场景+进度条之类的过渡。 前提:按File - Build Settings -将需转换的场景全部放进去(原场景也要),看见场景名...
  • Unity3d游戏开发之漫游场景的制作

    千次阅读 2015-03-12 14:18:34
    Unity3d场景漫游的制作
  • Unity3d场景切换

    千次阅读 2016-12-20 09:38:35
    //在该场景内的按钮添加一个C#脚本组件Component //在Button控件创建的组件 //在常见组件之前,我们先创建一个createNewScene.cs文件,用于单例模式 //createNewScene.cs using UnityEngine; usin
1 2 3 4 5 ... 20
收藏数 30,976
精华内容 12,390
关键字:

unity3d如何更换场景