Unity2D学习记录第八期
Unity2D学习记录第八期
一、deadline
这一张研究场景的转换机制,我最先想到的就是在角色死亡之后会重置当前的关卡,那么该设定什么样子的条件然后怎么写来让场景重置那?
这里就用一种最简单粗暴的方法,做一个有长方形的box collider的新gameobject作为触发器,碰到后就重置场景即可
代码如下:
using UnityEngine.SceneManagement;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
SceneManager是unity的场景管理,这里的函数意为加载一个名字为当前场景名称的场景
二、遍历组件和延时调用
在角色死亡的时候一般会停止当前的所有音乐然后播放死亡的音乐,那么要怎么停止所有音乐那,要是一个一个拿过来停就比较麻烦,所以这里就介绍一些新的东西来实现这个功能
AudioSource[] allAudio = GetComponents<AudioSource>();
foreach(AudioSource t in allAudio){
t.enabled=false;
}
这里先建立一个audiosource数组来存放找到的所有该类型对象,注意这里的GetComponents比之前学过的多了一个s,之前的只会返回找到的第一个,而这个会返回全部的该类型对象。
然后是一个foreach循环,用法就不多介绍了应该比较好理解
角色死亡之后一般也不会立马重置场景,而需要有一些过场动画之类的,这里就不做了,只用一个简单的延时,unity没有方便的delay函数这样子的东西,但是又invoke这样的延时阻塞调用说实话我感觉不是很好用
Invoke("Restart",2f);
Restart是自定义函数的名称,在其中写上场景重置的代码即可
三、场景转换
在讲述如何做场景转换之前需要提醒一下
首先我目前见过的场景转换一般有三种方式,一种是按键通常是f或者e来进入下一个场景,还有一种是触发转换,两种都有适合的场景。主要问题是按键转换,由于你必须时刻监听按键如果你在不该触发的地方按到按键就会有问题了,所以一般是附着在类似对话框上,只有在对话框出现后才有效果;最后一种是站在特定场景处后才可以触发按键,用的是碰撞检测。这里就第二种给出代码:
void Update(){
if(Input.GetKeyDown(KeyCode.E)){
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);
}
}
这里有几个新知识,特定按键用KeyCode.E来表示
loadscene不仅可以放入场景的名称也可以放入场景的编号,这里的buildindex意思就是场景的编号这里的意思也就是下一个场景的编号
ps:第一个场景会默认加载,但是后面的场景需要你手动加载到unity他们并不会自动加载,说实话有好处有坏处。加载地址:file->build setting,把场景拖拽过去即可。
四、2D光效
基础的光效其实并不复杂特别是2D的,毕竟其实好看的光效和这个系列的博客就没什么关系了,但是这里还是要说到的,毕竟做游戏光效是绕不过去的门槛。
ps:我现在以Unity2020.3.2版本为准
在window->package manager中搜索Universal RP包,这里面是光源
之后你就可以在Hierachy中新建光源了
这里以我做的点光源为例,比较重要的参数是light组件中的几个,range代表了光源的范围,当然你也可以通过图中的黄圈来调整。然后是color,光源可以不是白色的,就比如火焰可以篇红一些,甚至也可以搞一个鬼火之类的。然后是intensity代表的是光源的强度,虽然感觉怪怪的,就当作范围和强度共同决定了它的光通量吧。
你会发现如果啥都不改就放个光源上去其实效果不大特别是明亮的场景中,那是以为材质问题。上图就是tilemap(地形)材质修改过后的样子。diffuse意思是漫反射性。再对所有材质添加上漫反射性之后光源的作用就非常明显了,然后建议在玩家身上也放一个,最后的效果就像这样子:
五、代码补充
FindObjectOfType<Enemy>.death();
GetComponet<Animator>.Play("Death");
这里补充两句代码。做到现在游戏越来越复杂了,难免会调用别的对象但有时候实例化对象或者拖拽到文件中还是挺麻烦的所以这里给出一个暴力检索的方式来调用的方式,不过需要注意在因为是暴力检索,而且游戏是实时运行的所以这种暴力检索的效率是很低的代码生效可能会有延时。第二行是一种直接执行动画的方式,用处其实还挺多的,是一种比较方便的方法,因为有很多物品只有一种动画这种时候这样子调用就很方便。
六、小结
这一期主要是场景控制光效和一些代码上的新方法,内容还蛮多的,感谢各位观众,下一期将会讲述视觉差,说实话听起来有点悬乎,顺便还有一些别的东西。那么各位下期见