项目:https://pan.baidu.com/s/1jIDe2H4

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class Asteroid:MonoBehaviour {

         public GameObject m_explosionPrefab;    //爆炸Prefab
         public float m_moveSpeed = 5.0f;   //移动速度
         public float m_rotateSpeed = 1.0f;  //旋转速度

         private Rigidbody m_rigidbody;

         void Start() {
             m_rigidbody = GetComponent<Rigidbody>();
             m_rigidbody.velocity = Vector3.back * m_moveSpeed;  //速度
             m_rigidbody.angularVelocity = Random.insideUnitSphere * m_rotateSpeed;  //角速度
         }

         //小行星碰到玩家销毁自己
         void OnTriggerEnter(Collider other) {
             if(other.CompareTag("Player") || other.CompareTag("PlayerBullet")) {
                 Destroy(gameObject);
                 Explosion();
             }
         }

         //创建爆炸效果,2秒后删除
         void Explosion() {
             GameObject explosion = Instantiate(m_explosionPrefab,transform.position,transform.rotation) as GameObject;
             Destroy(explosion,2.0f);
         }
     }
 }

Asteroid

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class Background:MonoBehaviour {

         public float m_scrollSpeed = 1.0f; //滚动速度;

         void Update() {
             Scroll();
         }

         void Scroll() {
             if(transform.position.z <= -30.0f) {
                 transform.position = new Vector3(transform.position.x,transform.position.y,transform.position.z + 60.0f);
             } else {
                 transform.position += Vector3.back * m_scrollSpeed * Time.deltaTime;
             }

         }
     }
 }

Background

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class DestroyBoundary:MonoBehaviour {

         //任何物体超出边界范围摧毁
         void OnTriggerExit(Collider other) {
             Destroy(other.gameObject);
         }
     }
 }

DestroyBoundary

 using UnityEngine;
 using UnityEngine.UI;
 using System.Collections;

 namespace VoidGame {
     public class GameManager:MonoBehaviour {

         public static GameManager m_instance;
         public GameObject[] m_harzardPrefabs;   //要生成的对象数组
         public Vector3 m_spawnRange;    //生成范围
         public bool m_isGameOver;   //游戏是否结束

         private Text m_scoreText;   //分数文本框
         private Text m_gameOverText;    //游戏结束文本框
         private Text m_restartText; //重来文本框
         private int m_score;    //分数

         void Awake() {
             m_instance = this;

         }

         void Start() {
             m_scoreText = GameObject.Find("ScoreText").GetComponent<Text>();
             m_scoreText.text = "得分:0";
             m_gameOverText = GameObject.Find("GameOverText").GetComponent<Text>();
             m_gameOverText.enabled = false;
             m_restartText = GameObject.Find("RestartText").GetComponent<Text>();
             m_restartText.enabled = false;
             StartCoroutine(Spawn());
         }

         void Update() {
             if(m_isGameOver) {
                 if(Input.GetKeyDown(KeyCode.R)) {
                     Application.LoadLevel(Application.loadedLevel);
                 }
             }
         }

         IEnumerator Spawn() {
             while(true) {
                 if(m_isGameOver) {
                     m_gameOverText.enabled = true;
                     m_restartText.enabled = true;
                     break;
                 }
                 ); //每波等待时间
                 ;i < m_harzardPrefabs.Length;i++) {
                     //在限定的x轴范围内随机生成
                     Vector3 spawnPosition = new Vector3(Random.Range(-m_spawnRange.x,m_spawnRange.x),m_spawnRange.y,m_spawnRange.z);
                     Instantiate(m_harzardPrefabs[i],spawnPosition,Quaternion.identity);
                     yield return new WaitForSeconds(0.5f);  //生成单个物体候等待的时间
                 }
             }
         }

         //添加分数并显示
         public void AddScore(int score) {
             m_score += score;
             m_scoreText.text = "得分:" + m_score.ToString();
         }
     }
 }

GameManager

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {

     [System.Serializable]
     public class MoveBoundary {
         public float m_minX;
         public float m_maxX;
         public float m_minZ;
         public float m_maxZ;
     }
 }

MoveBoundary

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class Enemy:MonoBehaviour {

         public GameObject m_bulletPrefab;   //子弹Prefab
         public GameObject m_explosionPrefab; //爆炸Prefab
         public float m_moveSpeed = 5.0f;    //移动速度

         private Transform m_bulletSpawnerTransform;
         private Rigidbody m_rigidbody;
         private AudioSource m_audioSource;

         void Start() {
             m_rigidbody = GetComponent<Rigidbody>();
             m_rigidbody.velocity = Vector3.back * m_moveSpeed;
             m_bulletSpawnerTransform = transform.Find("BulletSpawner");
             m_audioSource = GetComponent<AudioSource>();
             StartCoroutine(Shoot());
         }

         //敌人碰到玩家,玩家子弹销毁自己
         void OnTriggerEnter(Collider other) {
             if(other.CompareTag("Player") || other.CompareTag("PlayerBullet")) {
                 Destroy(gameObject);
                 Explosion();
             }
         }

         //射击
         IEnumerator Shoot() {
             while(true) {
                 yield return new WaitForSeconds(0.5f);
                 Instantiate(m_bulletPrefab,m_bulletSpawnerTransform.position,Quaternion.identity);
                 m_audioSource.Play();
             }
         }

         //爆炸
         void Explosion() {
             GameObject explosion = Instantiate(m_explosionPrefab,transform.position,transform.rotation) as GameObject;
             Destroy(explosion,2.0f);
         }
     }
 }

Enemy

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class EnemyBullet:MonoBehaviour {

         public float m_moveSpeed = 20.0f;   //移动速度

         private Rigidbody m_rigidBody;

         void Start() {
             m_rigidBody = GetComponent<Rigidbody>();
             m_rigidBody.velocity = Vector3.back * m_moveSpeed;   //给刚体设置速度
         }

         //敌人子弹碰到 玩家 销毁自己
         void OnTriggerEnter(Collider other) {
             if(other.CompareTag("Player")) {
                 Destroy(gameObject);
             }
         }
     }
 }

EnemyBullet

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {
     public class Player:MonoBehaviour {

         public GameObject m_explosionPrefab;    //爆炸Prefab
         public GameObject m_playerBulletPrefab;   //子弹Prefab
         public float m_fireRate = 0.25f;    //子弹射击频率
         public float m_moveSpeed = 10.0f;   //移动速度
         public MoveBoundary m_moveBoundary; //移动边界

         private float m_nextFire;   //下一次发射时间
         private Transform m_bulletSpawnerTransform; //子弹发射器
         private AudioSource m_audioSource;
         private Rigidbody m_rigidbody;

         void Start() {
             m_audioSource = GetComponent<AudioSource>();
             m_rigidbody = GetComponent<Rigidbody>();
             m_bulletSpawnerTransform = transform.Find("BulletSpawner");
         }

         void Update() {
             //大于下一次发射子弹的时间才能发射子弹
             if(Input.GetButton("Fire1") && Time.time > m_nextFire) {
                 Shoot();
             }
         }

         void FixedUpdate() {
             float moveHorizontal = Input.GetAxis("Horizontal"); //水平方向移动
             float moveVertical = Input.GetAxis("Vertical"); //垂直方向移动

             Vector3 movement = ,moveVertical);  //移动方向
             m_rigidbody.velocity = movement * m_moveSpeed;  //刚体速度 = 移动方向 * 移动速度
             //固定飞机的移动范围
             m_rigidbody.position = ,Mathf.Clamp(m_rigidbody.position.z,m_moveBoundary.m_minZ,m_moveBoundary.m_maxZ));
             m_rigidbody.rotation = Quaternion.Euler(0f,0f,m_rigidbody.velocity.x * -4.5f);  //旋转
         }

         //玩家碰到敌人,敌人子弹,行星爆炸并销毁自己
         void OnTriggerEnter(Collider other) {
             if(other.CompareTag("Enemy")|| other.CompareTag("EnemyBullet") || other.CompareTag("Asteroid")) {
                 Destroy(gameObject);
                 Explosion();
                 GameManager.m_instance.m_isGameOver = true;
             }
         }

         //射击
         void Shoot() {
             m_nextFire = Time.time + m_fireRate;
             Instantiate(m_playerBulletPrefab,m_bulletSpawnerTransform.position,Quaternion.identity);
             m_audioSource.Play();
         }

         //爆炸
         void Explosion() {
             GameObject explosion = Instantiate(m_explosionPrefab,transform.position,transform.rotation) as GameObject;
             Destroy(explosion,2.0f);
         }
     }
 }

Player

 using UnityEngine;
 using System.Collections;

 namespace VoidGame {

     public class PlayerBullet:MonoBehaviour {

         public float m_moveSpeed = 20.0f;   //移动速度
         private Rigidbody m_rigidBody;

         void Start() {
             m_rigidBody = GetComponent<Rigidbody>();
             m_rigidBody.velocity = Vector3.forward * m_moveSpeed;    //给刚体设置速度
         }

         //玩家子弹碰到敌人,小行星销毁
         void OnTriggerEnter(Collider other) {
             if(other.CompareTag("Enemy") || other.CompareTag("Asteroid")) {
                 GameManager.m_instance.AddScore();
                 Destroy(gameObject);
             }
         }
     }
 }

PlayerBullet

Space Shooter的更多相关文章

  1. 源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展

    教程来源于:Unity官方实例教程 Space Shooter(一)-(五)       http://www.jianshu.com/p/8cc3a2109d3b 一.经验总结 教程中步骤清晰,并且 ...

  2. jspace2d——A free 2d multiplayer space shooter

    http://code.google.com/p/jspace2d/ —————————————————————————————————————————————————————————————— We ...

  3. Space Shooter 学习

    using UnityEngine; using System.Collections; /// <summary> /// 背景滚动 /// </summary> publi ...

  4. Space Shooter 太空射击

    1.控制玩家移动 public float speed = 10f; public float xMin = -6.5f; public float xMax = 6.5f; public float ...

  5. Unity 官方自带的例子笔记 - Space Shooter

    首先 买过一本叫 Unity3D开发的书,开篇第一个例子就是大家经常碰见的打飞机的例子,写完后我觉得不好玩.后来买了一本 Unity 官方例子说明的书,第一个例子也是打飞机,但是写完后发现蛮酷的,首先 ...

  6. unity官方案例精讲(第三章)--星际航行游戏Space Shooter

    案例中实现的功能包括: (1)键盘控制飞船的移动: (2)发射子弹射击目标 (3)随机生成大量障碍物 (4)计分 (5)实现游戏对象的生命周期管理 导入的工程包中,包含着一个完整的 _scene--- ...

  7. 绿色 或者 免安装 软件 PortableApps

    Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...

  8. Game Development Patterns and Best Practices (John P. Doran / Matt Casanova 著)

    https://github.com/PacktPublishing/Game-Development-Patterns-and-Best-Practices https://github.com/m ...

  9. Hands-On Unity 2018 x 移动游戏开发教程

    Hands-On Unity 2018 x Game Development for Mobile 使用Unity 2018.2创建具有出色游戏功能的精彩游戏   想学习在Unity制作游戏,但不知道 ...

随机推荐

  1. 《Head First Python》学习笔记03 异常处理

    异常(运行时错误): 当代码逻辑遇到意外事件时,比如打开一个文件,却发现文件不存在.这时是增加额外的代码处理逻辑,还是捕获异常呢?答案是:Python优先推荐捕获异常,然后恢复. Python异常机制 ...

  2. listView 分页加载数据

    Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...

  3. Android Apk获取包名和Activity名称

    一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ...

  4. js区分汉字和字符,校验长度

    遇到这么一个问题,    长度限制输入150个英文字符(小于等于150个英文字符长度),超出则直接禁止输入,并提醒:摘要输入必须小于等于75个中文字符长度! 长度校验倒是没问题,但是要区分汉字还是英文 ...

  5. 结构-行为-样式-PS笔记

    1.矩形选框,按住Shift就可以成为正圆或者正方形.按住ALt就可以控制圆心的位置: 2.美颜:滤镜--模糊--回到开始--历史记录工具,去掉不要的地方. 3.套索工具双击闭合:4.钢笔工具是做选区 ...

  6. [bzoj2957][楼房重建] (线段树)

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  7. Node.js中读取文件后用Json.parse方法报错

    今天,在调试一个node项目时,发现了一个很大的坑,在此分享给大家! 大家都知道,Json.parse()方法对格式要求是很严格的,格式不对极其容易报错,但是有时候格式看似是正确的也会报错. 比如这一 ...

  8. Ubuntu中Qt5.7.0无法输入中文

    把libfcitxplatforminputcontextplugin.so复制到安装的Qt目录下的两个文件夹中 sudo apt install fcitx-frontend-qt5 sudo cp ...

  9. 关于mysql 5.6.24 的my.ini配置问题

  10. HDU 4403 A very hard Aoshu problem(DFS)

    A very hard Aoshu problem Problem Description Aoshu is very popular among primary school students. I ...