通常的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;  //转换场景
	}
}





更多相关文章

  1. MySQL乐观锁在分布式场景下的实践
  2. java线程池使用场景和使用方法较详细文摘

随机推荐

  1. Android(安卓)- 引用计数(sp、wp、Refbase
  2. 时间序列&日期学习笔记大全(上)
  3. 图解LeetCode第 445 号问题: 两数相加 II
  4. 图解LeetCode第 199 号问题:二叉树的右视
  5. 使用RxJs WebSocket,HighCharts和Angular
  6. 一道让你拍案叫绝的算法题
  7. rsync和sersync实时同步文件
  8. 看动画轻松理解「 堆 」
  9. 图解 LeetCode 第 642 号问题:搜索自动完
  10. 【图解数据结构】一组动画彻底理解堆排序