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制作游戏,但不知道 ...
随机推荐
- Qt在表格中加入控件
任务:使用QTableWidget动态生成表格,在每行的某两列中加入QComboBox下拉框控件和QPushButton按钮控件 有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件 1.新建一 ...
- 巧用final
1.final可以修饰函数的参数,以防止函数内部随意篡改不允许修改的参数. 2.在函数内部,把函数的局部变量声明为final类型,可以检查在函数内部它们是否的确只被赋值一次.
- Visual Studio属性配置中使用宏
在学习C语言的时候,我们曾经遇到过一个宏的概念.宏的作用机理本质上是宏的展开,C语言中的宏的用法也有很多种(水其实很深...),不过从感觉上来讲,人们大致上会在以下的场景中,利用宏来解决一些窘境:一是 ...
- 如何优雅的设计Redux中的Store
用了几个月的redux,现在回过来总结一下. 刚开始用的时候遇到一个比较大的疑问,就是如何设计redux的store中的state树,这应该是我在使用redux中最大的一个疑问,阻挡了我前进的脚步,当 ...
- Linux文件系统十问,你知道吗?
关于文件系统,相信大家都不陌生.身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢.那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧: 1.机械磁 ...
- java如何避免死锁
在有些情况下死锁是可以避免的.本文将展示三种用于避免死锁的技术: 加锁顺序 加锁时限 死锁检测 加锁顺序 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生. 如果能确保所有的线程都 ...
- JavaScript的事件机制
JavaScript的事件机制 摘要 事件是将JavaScript脚本与网页联系在一起的主要方式,是JavaScript中最重要的主题之一,深入理解事件的工作机制以及它们对性能的影响至关重要.本文将详 ...
- Android Studio报错 Error: A library uses the same package as this project
今天在导入一个项目的时候,as报错 Error: A library uses the same package as this project 经过百度Google 发现解决办法:在modules的 ...
- curl命令PostJson
curl -H "Content-Type: application/json" -X POST --data '{"data":"1"} ...
- JavaScript中String.prototype.replace() 方法的使用
摘抄于:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace ...