等学会了场景制作,梦里啥样的都能有(Unity-场景类)

我感觉我最近有点睡得不安稳,总是半夜突然就惊醒了。然后起来看一眼手机,凌晨3点。

接着我发现游戏体力满了,花费了10分钟把体力清空然后什么东西都没掉落。

我用这十分钟换取了一夜未眠,我也不知道赚不赚。

这导致我有的时候下午补觉会梦到一些奇怪的场景,例如游戏里的男角色抱着我的大腿说能不能别只抽女角色你这个老色皮。

又或者是打游戏玩到了超神结果网断了,唰一下给我惊醒了,困意一下子给我干没了。

难怪医生会说适当的午觉有助于人体身心健康,我今天愣是一把游戏没敢打就怕现实重演,时间全用在学习上了。

为了能让其他人感觉到我的痛苦,我打算等我学会做RPG游戏的时候把这些场景通通加到玩家角色身上。

言归正传,今天要讲的内容是有关于场景类的知识。

话不多说直接出发!



一、场景类(P27)


以上就是一个大概的游戏框架了,之前都是在默认的游戏场景中添加组件和脚本,其实也可以通过代码或者组件来创建新的游戏场景。

在Unity的层级视图下可以看到有一个叫做SampleScene的东西,下面包含了两个游戏对象

这个SampleScene就是一个默认的游戏场景,同时SampleScene在项目视图中的Scenes文件夹中,所以可以在Scenes文件夹创建(鼠标右键)一个新的游戏场景。

双击打开之后就是新创建的场景了


1-1.通过代码加载场景(从Sample加载到My)-场景跳转

在SampleScence中打开文件→项目-生成和设置(Ctrl+Shift+B)→将场景都拖进到build中的场景(0和1就是场景的索引号)

接下来创建一个空对象,再创建一个脚本文件并挂载打开。

首先在代码的顶部导入:using UnityEngine.SceneManagement.

同步加载场景代码(索引)SceneManager.LoadScene(1);

回到Unity后运行,系统会自动打开1号场景(MyScene)

除了索引的方式也可以用名称的方式,将数字改为“场景名称”

SceneManager.LoadScene("MyScene");

1-2.获取当前场景(当前激活的场景)

Scene scene = SceneManager.GetActiveScene();

代码中的scene也就是当前的SampleScene(当前的场景)

为了验证是否获取成功,用打印的方式来验证:

Debug.Log(scene.name);

在这里的scene就是场景类,对于一些场景类而言有一些属性需要了解下。

除了上面所提到的场景名称Debug.Log(scene.name);


1-3.场景是否被加载

Debug.Log(scene.isLoaded);


1-4.场景路径

Debug.Log(scene.path);


1-5.场景索引(得到在Build场景面板中的索引号)

Debug.Log(scene.buildIndex);

1-6.得到所有根游戏物体

scene.GetRootGameObjects();

这里会返回一个宿主:

GameObject[] gos = scene.GetRootGameObjects();

可以打印出来看一下宿主里有什么东西(打印长度):

Debug.Log(gos.Length);

在下面的图中可以详细看到控制台的返回内容



二、场景管理类(P27)

2-1.场景管理类(当前已加载的场景数量)

Debug.Log(SceneManager.sceneCount);


2-2.直接创建新场景(括号内自定义场景名称)

SceneManager.CreateScene("newScene");

当然也可以设定一个返回:

Scene newScene = SceneManager.CreateScene("newScene");

可以看到这里直接多出了一个新的名为NewScene的空场景

如果把上述俩个行代码顺序进行颠倒的话,会发现当前已加载场景会从1变为2。


2-3.卸载场景(异步销毁)括号内放入想要销毁的场景

SceneManager.UnloadSceneAsync(newScene);

异步销毁:该函数并不是立即销毁物体而是给物体加了一个标识符,物体还在内存中,在下一帧时才销毁并从内存中移除

在这里运行后可以看到,左下角的​激活场景仍然为2但是没有出现newScene这个场景。

因为是在创建出来之后被直接删除了​。


2-4.加载场景(多参数)

SceneManager.LoadScene("MyScene",LoadSceneModel.Single);

这里的Single是以简单的替换加载存在,运行以后会直接加载为​MyScene顶替掉原本的SampleScene。

如果将Single换为另一种:

SceneManager.LoadScene("MyScene",LoadSceneModel.Additive);

可以看到两个场景的内容会叠加在一起

但是这种方式在加载复杂场景或者大型游戏的场景时会很容易造成卡顿

关于如何加载复杂场景的异步加载​将放在下篇笔记中进行讲解。



​今天的内容就到此为止了!

每次写完文章都是十点多,感觉一天天也没干啥事时间净霍霍了。

今天的我游戏还没打就先学习了,我要好好去奖励一下自己。

大伙下篇笔记见,拜了个拜


​原教程链接:

https://www.bilibili.com/video/BV1gQ4y1e7SS/?spm_id_from=333.337.search-card.all.click&vd_source=24f33eddf5587fb40e947798abce6715

展开阅读全文

页面更新:2024-04-14

标签:场景   物体   脚本   索引   加载   名称   代码   方式   内容   游戏

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top