太空大战项目制作
一、背景制作
1、创建一个Quad,更名为BG,并为其添加材质
2、设置旋转和放大参数

3、创建一个Quad,更名为BG2,并为其添加材质,作为BG的子对象,设置Y轴位置为-1

4、设置主摄像机参数

5、为BG添加脚本,完成背景循环运动

public class BG : MonoBehaviour {public float speed;  //5private Vector3 startPos;void Start () {startPos = transform.position;}void Update () {float pos = Mathf.Repeat(speed*Time.time,30f);transform.position = startPos + pos * Vector3.forward*(-1);
//transform.position = startPos + pos * Vector3.back();}
}

二、飞船制作
1、设置飞船位置

2、设置火箭喷射位置

3、为飞船添加刚体,并取消重力作用

4、为飞船添加脚本,完成飞船运动

public class PlayerShip : MonoBehaviour {public float speed;private Rigidbody rig;void Start () {rig = GetComponent<Rigidbody> ();}void Update () {float h = Input.GetAxis ("Horizontal");float v = Input.GetAxis ("Vertical");Vector3 pos = new Vector3 (h, 0, v);rig.velocity = pos * speed;}
}

5、为飞船设置偏移
public float fx;//偏移量(值为3)
rig.rotation = Quaternion.Euler(0,0,rig.velocity.x*(-1)*fx);
6、为飞船设置边界

public float xMin,xMax,zMin,zMax;//边界值(根据实际情况设定)
//运动边界float posX = Mathf.Clamp(rig.position.x, xMin, xMax);float poxZ = Mathf.Clamp(rig.position.z, zMin, zMax);rig.position = new Vector3(posX,0, poxZ);

三、子弹制作
1、创建一个空对象,放到飞船对象下面,更名为bulletPos,作为子弹生成的位置

2、为子弹添加脚本,完成子弹的运动

public class Bullet : MonoBehaviour {public float speed;(20)void Start () {Rigidbody rig = GetComponent<Rigidbody>();rig.velocity = transform.forward*speed;}
}

3、点击鼠标左键发射子弹

public class PlayerShip : MonoBehaviour {public GameObject bullet;//子弹public Transform bulletPos;//子弹发射位置public float shotSpace;//子弹发射间隔时间(0.25)
private float nextShot;//下一次发射时间
void Update () {if (Input.GetButton("Fire1") && Time.time>nextShot){nextShot = Time.time + shotSpace;Instantiate(bullet, bulletPos.position, bulletPos.rotation);}
}

4、子弹超出边界盒子后销毁
(1)创建一个空对象,更名为border
(2)为border添加BoxCollider,并设置大小
在这里插入图片描述

(3)为border添加脚本,完成子弹退出border后 2秒后销毁

public class DestoryBullet : MonoBehaviour {public void OnTriggerExit(Collider other){Destroy(other.gameObject,2f);}
}

5、飞船发射子弹产生音效
(1)为飞船添加AudioSource组件,添加音频,取消Play On Awake

(2)修改飞船脚本,完成发射子弹时有音效产生

    private AudioSource bulletAudio;//子弹音效void Start () {bulletAudio = GetComponent<AudioSource>();}
void Update () {if (Input.GetButton("Fire1") && Time.time>nextShot){bulletAudio.Play();
}
}

6、为游戏添加背景音乐
为Main Camera添加AudioSource组件,添加音频,勾选Loop

四、随机生成敌人
1、创建一个空对象GameManager,为其添加脚本,完成随机生成敌人的功能

public class GameManager : MonoBehaviour {public GameObject[] enemys;//敌人对象(3)public float spwanWait;//每生成一个敌人的时间间隔(0.75)public float spwanCount;//每一波敌人的数量(6)void Start () {StartCoroutine(SpwanEnemys());}IEnumerator SpwanEnemys(){while (true){for (int i = 0; i <= spwanCount; i++){int index = Random.Range(0,enemys.Length);GameObject go = enemys[index];Vector3 pos=new Vector3(Random.Range(-7,7),0,-32);Instantiate(go, pos, Quaternion.identity);yield return new WaitForSeconds(spwanWait);}}}
}

2、为每个陨石添加子弹运动脚本、刚体和碰撞器,完成敌人下落功能

3、设置每一波陨石生成的间隔时间和程序启动后等待时间

 public float waveWait;//生成每一波敌人的间隔时间(3)
public float startWait;//程序启动时等待时间(2)IEnumerator SpwanEnemys(){yield return new WaitForSeconds(startWait);while (true){for (int i = 0; i <= spwanCount; i++){int index = Random.Range(0,enemys.Length);GameObject go = enemys[index];Vector3 pos=new Vector3(Random.Range(-7,7),0,-32);Instantiate(go, pos, Quaternion.identity);yield return new WaitForSeconds(spwanWait);}yield return new WaitForSeconds(waveWait);}}

4、为陨石添加脚本Meteorite,完成陨石旋转下落

public class Meteorite: MonoBehaviour {public float speed;//旋转下落速度(10)void Start(){Rigidbody rig = GetComponent<Rigidbody>();rig.angularVelocity = Random.insideUnitCircle * speed;
}
}

五、设置敌机
1、更改GameManager设置,添加敌机

2、为敌机添加子弹运动脚本、刚体、碰撞器

3、为敌机子弹添加脚本、刚体、碰撞器,完成子弹自动运动功能

4、为敌机添加EnemyShip脚本和音频,完成敌机自动射击功能

public class EnemyShip : MonoBehaviour {public GameObject bullet;//子弹public Transform bulletPos;//子弹发射位置public float shotSpace;//子弹发射间隔时间(1)public float shotWait;//发射子弹等待时间(1)private AudioSource bulletAudio;//子弹音效void Start () {InvokeRepeating("Fire",shotWait,shotSpace);bulletAudio = GetComponent<AudioSource>();}void Fire(){Instantiate(bullet, bulletPos.position, bulletPos.rotation);bulletAudio.Play();}
}

六、制作爆炸特效
1、为飞船、我方子弹、敌机子弹、敌机分别添加标签


2、飞船爆炸

public class GameManager : MonoBehaviour {public static int palyerLife = 10;//飞船生命值public static int enemyLife = 5;//敌机生命值
}
public class PlayerShip : MonoBehaviour {public GameObject playerExplosion;//飞船爆炸特效
private AudioSource playerAudio;//飞船爆炸音效
void Start () {playerAudio = GetComponent<AudioSource>();
}
void OnTriggerEnter(Collider other){if (other.tag == "Enemy" || other.tag=="EnemyBolt"){GameManager.palyerLife--;if (GameManager.palyerLife==0){Instantiate(playerExplosion, transform.position, transform.rotation);
playerAudio.Play();}}}

3、陨石爆炸

public class Stone : MonoBehaviour {public GameObject enemyExplosion;//陨石爆炸特效
void Start(){stoneAudio = GetComponent<AudioSource>();}void OnTriggerEnter(Collider other){if (other.tag == "Player" || other.tag == "PlayerBolt"){Instantiate(enemyExplosion, transform.position, transform.rotation);
stoneAudio.Play();
Destroy(gameObject,0.2F);}}
}

4、敌机爆炸

public class EnemyShip : MonoBehaviour {public GameObject enemyExplosion;//敌机爆炸特效private AudioSource enemyAudio;//敌机爆炸音效void Start () {enemyAudio = GetComponent<AudioSource>();
}
void OnTriggerEnter(Collider other){if (other.tag == "Player" || other.tag == "PlayerBolt"){GameManager.enemyLife--;if (GameManager.enemyLife == 0){GameManager.enemyLife = 5;Instantiate(enemyExplosion, transform.position, transform.rotation);
enemyAudio.Play();
Destroy(gameObject,0.2F);}}
}
}

七、UI界面
1、生命值、积分

public class GameManager : MonoBehaviour {public static int palyerLife = 10;//飞船生命值public static int enemyLife = 5;//敌机生命值
public static int score = 0;//玩家积分
}
public class EnemyShip : MonoBehaviour {void OnTriggerEnter(Collider other){if (other.tag == "Player" || other.tag == "PlayerBolt"){GameManager.enemyLife--;if (GameManager.enemyLife == 0){GameManager.score+=5;GameManager.enemyLife = 5;Instantiate(enemyExplosion, transform.position, transform.rotation);enemyAudio.Play();Destroy(gameObject, 0.2F);}}
}
public class PlayerShip : MonoBehaviour {public Text playerLife;
public Text score;
void Update () {playerLife.text = "玩家生命值为:" + GameManager.palyerLife;score.text = "玩家积分为:" + GameManager.score;
}
}

2、游戏结束

public class PlayerShip : MonoBehaviour {public GameObject gameOver;
void OnTriggerEnter(Collider other){if (other.tag == "Enemy" || other.tag == "EnemyBolt"){GameManager.palyerLife--;if (GameManager.palyerLife == 0){Instantiate(playerExplosion, transform.position, transform.rotation);playerAudio.Play();Time.timeScale = 0;//强行暂停
gameOver.SetActive(true);}}}

3、游戏重新开始和退出

public class GameOver : MonoBehaviour {public GameObject gameOver;public void ReStart(){SceneManager.LoadScene(0);//重新加载游戏场景Time.timeScale = 1;//继续游戏GameManager.palyerLife = 10;GameManager.score = 0;gameOver.SetActive(false);
}
public void Quit(){Application.Quit();//游戏发布后的退出
}
}

2021-11-04太空大战项目制作相关推荐

  1. 用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)

    本次来说一说如何利用lufylegend.js引擎制作一款html5游戏后将其通过Qt转换成EXE程序.步骤其实非常简单,接下来就一步步地做一下解释和说明. 首先我们来开发一个有点类似于太空大战的游戏 ...

  2. 初学者Unity项目--太空大战

    太空大战算是比较经典的游戏了.这两天在跟着视频自学了一下.能做到的效果就是飞机发出子弹打爆陨石,如果被陨石碰到就死掉.简单的赤果果.界面如下: 现在做个总结:(模型声音之类的是导入的资源包.) 很明显 ...

  3. 尚硅谷——谷粒商城项目开发记录——2021.11.19

    尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...

  4. 尚硅谷——谷粒商城项目开发记录——2021.11.22

    尚硅谷--谷粒商城项目开发记录--2021.11.22 概念: 1.对象优化: 新增的API: ES6 给 Object 拓展了许多新的方法,如: keys(obj): 获取对象的所有 key 形成的 ...

  5. 尚硅谷——谷粒商城项目开发记录——2021.11.21

    尚硅谷--谷粒商城项目开发记录--2021.11.21 概念: 1.var和let的区别: 作用域: var 声明的变量往往会越域 let 声明的变量有严格局部作用域 声明次数: var 可以声明多次 ...

  6. 尚硅谷——谷粒商城项目开发记录——2021.11.20

    尚硅谷--谷粒商城项目开发记录--2021.11.20 概念: 1.SpringCloud Alibaba: 简介: Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此 ...

  7. 【iVX 初级工程师培训教程 10篇文拿证】05 画布及飞机大战游戏制作

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  8. 第13期微生物组-宏基因组分析(线上/线下同时开课,2021.11)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程和转录组的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线下课 ...

  9. 微生物组-宏基因组分析(线上/线下同时开课,2021.11)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程和转录组的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线下课 ...

最新文章

  1. Python学习笔记17:标准库之数学相关(math包,random包)
  2. 机器学习读书笔记(一)
  3. CDays–2 完成核心功能 CMD模块 Python基础教程 cmd cli
  4. SSH整合中,使用父action重构子类action类.(在父类中获取子类中的泛型对象)
  5. 如何使用js动态显示或隐藏DIV
  6. 华硕java安装教程win10_华硕笔记本安装win10系统教程
  7. 网络编程学习记录-1
  8. 开发者批评苹果商店佣金过高,库克将面临立法者质疑;花呗接入央行征信;GitHub 发布更新| 极客头条
  9. 经实验效果显著!VR虚拟帮助病人重新走路
  10. 解决SourceTree不断提示输入密码问题
  11. 利用ESXI-Customizer制作定制化的ESXI
  12. LINUX多路IO技术 SELECT VS POLL VS EPOLL
  13. 怎么下载小程序图片 ?
  14. 如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)
  15. 信息化与业务流程再造
  16. 免费好用的录屏软件OBS-Studio
  17. 谷歌浏览器的开源代码(M84版本)
  18. R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by)
  19. 法国敏捷开发与敏捷测试模式
  20. k8s自定义controller三部曲之三:编写controller代码

热门文章

  1. 使用镜像站加速魔趣 mokee Android 系统代码下载
  2. 2023年,IT互联网还有发展前景吗?
  3. CloneCD和IsoBuster配合使用以提取VCD中的文件
  4. android ---- 多渠道、多模块下自动化发布maven
  5. 图像拼接小实验开发日志和笔记
  6. 自动的运行时软件测试工具
  7. 色彩关系太复杂?一篇内容帮你整理明白
  8. nxd无盘怎么设置服务器网卡,网众NxD 6.0无盘系统的客户端缓存设置
  9. ubuntu美化桌面
  10. 深入探索c++对象模型(五、程序转化语义)