【Unity3D】学习笔记(第3记) 2D游戏开发基本技巧之场景切换(Javascript)
16lz
2021-01-22
通常的2D游戏游戏都是横版或竖版的,要进入下一关都是从左走到右(或上到下之类)边界的触发点,有时也需要同时消灭所有小怪才能进入下一关,而我下面实现的切换场景的条件是收集所有金币并走到出口点(Exit)触发可进入下一关的提示,按下空格即可进入下一关。
现在开始进行3个场景循环切换的简单练习
先来几个变量声明,贴图可改为其他提示图,也可文字提示“按下空格切换”等;
var winImage : Texture2D; //游戏结束弹出的“you win”贴图 private var myTime : float=0; //记录时间的变量 private var isNext = false; //是否进入下一关
如何贴图可添加一个OnGUI()函数来实现
function OnGUI() { if(isNext) //满足可进入下一关条件,弹出贴图 GUI.DrawTexture(Rect(Screen.width /2-179,Screen .height /2 -90,358,180),winImage,ScaleMode.ScaleToFit ,true,0); }
最后把场景切换功能放在Update()函数实现,当游戏场景运行5秒后,弹出“you win”贴图,按下空格进入第2个场景,同理进入第3个场景,接着继续回到第一个场景,如此循环;因为通常默认情况按下空格键(Input.GetButtonDown("Jump"))是跳跃功能,为了避免混淆,加入了一个布尔型变量isNext来共同实现;也可以在场景加入一个Button控件,单击进入下一关;只需改变if语句{如:if(GUI.Button( Rect( x,y ,width ,height ) , "切换场景" ) );}。
(提示:要实现场景切换还需在File->Building Setting中添加场景,并赋予下面用到的编号0,1,2等)
function Update () { myTime += Time.deltaTime ; //获取游戏开始到当前时间 if(myTime >= 5) //游戏运行时间大于5秒就切换场景 isNext = true; //也可以从OnTriggerEnter()函数获取 if(Input.GetButtonDown("Jump")&&isNext)//按下空格 { isNext = false; var index : int = Application.loadedLevel; if(index <= 1) //当前在场景0 Application.LoadLevel (index+1); //场景编号+1进入下一关 if(index == 2) Application .LoadLevel (0); //回到第1关 //Application .LoadLevel ("Scene0");//也可以直接用场景名 } }
关于触发点检测可利用碰撞检测的方法(下面代码是“进入触发器”),同时需将贴图exit的标签改为“exit”(Inspector->Tag),给exit添加Box collider,Is Trigger也要打勾;
function OnTriggerEnter(other:Collider) { //exit为触发器; //搜索场景中的金币直到为空(被收集了) if(other.tag=="exit"&&GameObject.FindWithTag("jinbi")==null)//需收集所有金币 { isNext = true; //转换场景 } }