1. 调用爆炸效果
再拖一个精灵到层次面板,命名为explosionPlayer。把爆炸代码赋给它,并把FrameNumber改成5
把两个爆炸效果存为预置物体精灵,并删掉层次面板中的爆炸效果。
取消MeshRenderer中的投射阴影和接收阴影
修改陨石的代码,添加变量并将OnTriggerEnter修改如下。
var explosionEnemy_b1:GameObject;
var explosionPlayer_b1:GameObject;
function OnTriggerEnter(other:Collider){
if(other.tag=="projectile"){
Instantiate(explosionEnemy_b1,transform.position,transform.rotation);
transform.position=new Vector3(Random.Range(-2.6,2.6),3.5,0);
Destroy(other.gameObject);
}
if(other.tag=="Player")
{
Instantiate(explosionPlayer_b1,transform.position,transform.rotation);
transform.position=new Vector3(Random.Range(-2.6,2.6),3.5,0);
}
}
只需将PlayerController脚本修改为:
var speed:float=3.0;
var projectile_bl:GameObject;
var z:GameObject;
var y:GameObject;
function Update () {
if(transform.position.x>-3.1 && transform.position.x<3.1){
transform.Translate(speed*Input.GetAxis("Horizontal")*Time.deltaTime,0,0);}
else if(transform.position.x<-3.1){transform.position.x=3.0;}
else if(transform.position.x>3.1){transform.position.x=-3.0;}
if(Input.GetKeyDown(KeyCode.Space)){
Instantiate(projectile_bl,transform.position,transform.rotation);
z=Instantiate(projectile_bl,transform.position,transform.rotation);
y=Instantiate(projectile_bl,transform.position,transform.rotation);
z.transform.Rotate(0,0,30);
y.transform.Rotate(0,0,-30);
}
}
3.实现计分与显示功能
修改RockController脚本。
申请变量:
static var score:int=0;
static var lives:int=3;
若击中炮弹,则score+=100;若和玩家碰撞,lives--;
添加OnGUI函数:
function OnGUI(){
GUI.Label(new Rect(10,10,120,20),"score:"+score.ToString());
GUI.Label(new Rect(10,30,60,20),"lives:"+lives.ToString());
}
解释:例如第一行,new Rect绘制标签的位置,离左边10元素,离上边10元素,宽度120,高度20,标签上显示score,ToString把它变成字符串。
4.倒计时个性化图片显示
添加timeRemainDisplay脚本。
var timeNumbers:Texture[];//申请图片数组,存放图片
static var leftTime:int=100;//剩余时间,初始值100秒
var myTime:float=0;//计时用
function Update () {
myTime+=Time.deltaTime;
if(myTime>1){//知道它增加到一秒的时候,开始倒计时
leftTime--;
myTime=0;//清零,重新计时下一个一秒
}
if(leftTime<1.0)
leftTime=0;
}
function OnGUI(){
for(var i:int=0;i<leftTime.ToString().Length;i++){
<span style="white-space:pre"> </span>//在屏幕什么位置显示图片,画一个矩形来显示图片。
GUI.DrawTexture(new Rect(350+i*32,20,32,45),timeNumbers[System.Int32.Parse((leftTime.ToString())[i].ToString())]);
}
}
System.Int32.Parse把数字的字符串类型转换为数值型。leftTime.ToString把剩余时间转换为字符串
5.背景音乐和开始场景
将背景音乐文件拖到主摄像机上并设置音量和循环播放即可。
新建场景,存为start。创建startController脚本,拖到相机上。
private var intext:String="Instruction:\n\n Press left and right arrow to move . \n Press Space to fire.";//游戏玩法显示
var startTexture:Texture;
function OnGUI(){
GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),startTexture);//满屏显示在窗口里
GUI.Label(new Rect(10,10,250,200),intext);
if(Input.anyKeyDown)
Application.LoadLevel("level");
}