Space Shooter
项目: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的更多相关文章
- 源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展
教程来源于:Unity官方实例教程 Space Shooter(一)-(五) http://www.jianshu.com/p/8cc3a2109d3b 一.经验总结 教程中步骤清晰,并且 ...
- jspace2d——A free 2d multiplayer space shooter
http://code.google.com/p/jspace2d/ —————————————————————————————————————————————————————————————— We ...
- Space Shooter 学习
using UnityEngine; using System.Collections; /// <summary> /// 背景滚动 /// </summary> publi ...
- Space Shooter 太空射击
1.控制玩家移动 public float speed = 10f; public float xMin = -6.5f; public float xMax = 6.5f; public float ...
- Unity 官方自带的例子笔记 - Space Shooter
首先 买过一本叫 Unity3D开发的书,开篇第一个例子就是大家经常碰见的打飞机的例子,写完后我觉得不好玩.后来买了一本 Unity 官方例子说明的书,第一个例子也是打飞机,但是写完后发现蛮酷的,首先 ...
- unity官方案例精讲(第三章)--星际航行游戏Space Shooter
案例中实现的功能包括: (1)键盘控制飞船的移动: (2)发射子弹射击目标 (3)随机生成大量障碍物 (4)计分 (5)实现游戏对象的生命周期管理 导入的工程包中,包含着一个完整的 _scene--- ...
- 绿色 或者 免安装 软件 PortableApps
Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...
- 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 ...
- Hands-On Unity 2018 x 移动游戏开发教程
Hands-On Unity 2018 x Game Development for Mobile 使用Unity 2018.2创建具有出色游戏功能的精彩游戏 想学习在Unity制作游戏,但不知道 ...
随机推荐
- sql server常有的问题-实时错误'91' 对象变量或with块变量未设置
这样的问题,对于我们这样的初学者来说,无疑是一个接触sql server后第一个艰难的问题,“实时错误'91' 对象变量或with块变量未设置”这句话到底透露出什么信息?直至写此博文,我依然看不出什么 ...
- linux下C++动态链接C++库示例详解
注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一.介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++程序员经常碰到的问题. 事 ...
- 代码用于脚本语言开发平台Script.NET即将开源
文章结束给大家来个程序员笑话:[M] 为了放慢Script.NET的开展,蓝蚂蚁工作室将在近期将Script.NET的全部代码开源,因为开源之前需要将代码先整理一遍,大约需要一周时间,筹划7月初可以整 ...
- 通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题
今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述: 目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到s ...
- OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记
说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...
- php之简单的文件管理(基本功能)
(1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...
- 【Java每日一题】20170112
20170111问题解析请点击今日问题下方的"[Java每日一题]20170112"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- PHP之MYSQL数据库
MYSQL数据库简介 1.什么是数据库? 数据库(database) 就是一个由一批数据构成的有序集合,这个集合通常被保存为一个或多个彼此相关的文件. 2.什么是关系型数据库? 数据被分门别类的存 ...
- HDU 1728 逃离迷宫(DFS||BFS)
逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- HDU 1272 小希的迷宫(乱搞||并查集)
小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有 ...