Unity学习之路(一)太空大战类游戏制作3
2016-01-24 23:39
465 查看
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);
}
}
2. 升级武器系统
只需将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++){
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");
}
再拖一个精灵到层次面板,命名为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);
}
}
2. 升级武器系统
只需将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");
}
相关文章推荐
- [转]Unity中使用ulua的个人经验总结
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
- Unity Flat Shading实现低多边形(low-poly)效果
- [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
- unity, StartCoroutine and StopCoroutine
- 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture
- unity3d之刚体碰撞器和触发器的一些知识
- Unity学习之路(1)
- unity 安装
- 【Unity Shader】概述以及Diffuse shader和unity5新功能Standard shader
- Unity实现残影效果
- Unity 5.3配置开发环境、安卓环境
- Unity3D-NGUI动态加载图片
- unity ai car demo
- Unity5.3 AssetBundleName批量赋值
- unity学习笔记3
- unity Material之tilling和offset属性
- Unity3d的脚本类为什么要尽量避免继承MonoBehaviour类
- 初学unity(简单的视觉欺骗)
- Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享