using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AsteroidCtr : MonoBehaviour
{// Use this for initialization
public float RotationSpeed;
public int Score;
public float MoveSpeed;
public GameObject Boll;
private int _axis;
private Rigidbody _rig;
private CreateGameManagerCtr _createGameManager;
private AudioManagerCtr _audioManager;
private ScoreManager _scoreManager;voidStart(){
_scoreManager = GameObject.FindWithTag(TagManager.ScoreManagerName).GetComponent<ScoreManager>();
_audioManager = GameObject.FindWithTag(TagManager.AudioManagerName).GetComponent<AudioManagerCtr>();
_createGameManager = GameObject.FindWithTag(TagManager.CreateManagerName).GetComponent<CreateGameManagerCtr>();
_rig = GetComponent<Rigidbody>();if(null == _rig){
_rig = gameObject.AddComponent<Rigidbody>();}if(RotationSpeed ==0){
RotationSpeed =250;}if(MoveSpeed ==0)
MoveSpeed =6;
_rig.useGravity = false;
_rig.velocity = Vector3.back * MoveSpeed;
_axis = Random.Range(0,2);}// Update is called once per framevoidUpdate(){
transform.RotateAround(transform.localPosition,(_axis ==0)? transform.right : transform.forward, RotationSpeed * Time.deltaTime);}
private voidOnTriggerEnter(Collider other){if(_createGameManager.PlayerOver)return;// 销毁对方//销毁自己//通知管理释放粒子特效if(other.tag.Equals(TagManager.PlayBulletName)){
_createGameManager.CreateParticleByV3AndIndex(other.transform.position,2);
_audioManager.PlayAudio(3, AudioName.EnemyKill);
_scoreManager.AddScore(Score);Destroy(other.gameObject);Destroy(gameObject);if(Boll != null){
GameObject tmp =Instantiate(Boll, transform.position, Quaternion.identity);Destroy(tmp,3);}}//PlyaerBulletEndif(other.tag.Equals(TagManager.PlayName)){if(_createGameManager.PlayerIsProtected){
_createGameManager.CreateParticleByV3AndIndex(other.transform.position,2);
_audioManager.PlayAudio(3, AudioName.EnemyKill);
_scoreManager.AddScore(Score);Destroy(gameObject);if(Boll != null){
GameObject tmp =Instantiate(Boll, transform.position, Quaternion.identity);Destroy(tmp,3);}return;}//实例化粒子特效
_createGameManager.CreateParticleByV3AndIndex(other.transform.position,2);
_createGameManager.CreateParticleByV3AndIndex(other.transform.position,0);//声音管理
_audioManager.PlayAudio(3, AudioName.EnemyKill);
_audioManager.PlayAudio(1, AudioName.PlyerKill);//分数++
_scoreManager.AddScore(Score);//玩家死亡Destroy(other.gameObject);Destroy(gameObject);
_audioManager.StopGame();
_createGameManager.StopGame();
_scoreManager.StopGame();}//PlayerEnd}}
声音管理者
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioManagerCtr : MonoBehaviour
{
public AudioClip[] Clips;//1. BG //2. Plyer 子弹发射 玩家销毁//3. EnemyShip 子弹发射敌机销毁//4. Enemy //陨石销毁
private AudioSource[] _sources;voidStart(){
_sources = gameObject.GetComponents<AudioSource>();}// Update is called once per framevoidUpdate(){}
public voidStopGame(){
_sources[0].Stop();}
public voidPlayAudio(int AudioIndex, string ClipName){
AudioClip tmpClip = null;
foreach (AudioClip clip in Clips){if(clip.name.Equals(ClipName)){
tmpClip = clip;break;}}if(tmpClip == null)//片段名字错误return;
_sources[AudioIndex].clip = tmpClip;
_sources[AudioIndex].Play();}
public voidPlayAudio(int AudioIndex){}}
声音名字管理
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AudioName
{//定义name
public static string PlyerKill ="explosion_player";
public static string PlyerShoot ="weapon_player";
public static string EnemyShipKill ="explosion_enemy";
public static string EnemyShipShoot ="weapon_enemy";
public static string EnemyKill ="explosion_asteroid";}
特效球
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BollCtr : MonoBehaviour
{// Use this for initialization
private MeshRenderer _meshRenderer;
private bool _isHAHA;
private float _timer;
private CreateGameManagerCtr _createGameManager;
private AudioManagerCtr _audioManager;
private ScoreManager _scoreManager;voidStart(){
_isHAHA = true;
_meshRenderer = gameObject.GetComponent<MeshRenderer>();
_scoreManager = GameObject.FindWithTag(TagManager.ScoreManagerName).GetComponent<ScoreManager>();
_audioManager = GameObject.FindWithTag(TagManager.AudioManagerName).GetComponent<AudioManagerCtr>();
_createGameManager = GameObject.FindWithTag(TagManager.CreateManagerName).GetComponent<CreateGameManagerCtr>();}// Update is called once per framevoidUpdate(){
_timer += Time.deltaTime;if(_timer >=1.5f&& _isHAHA){
_isHAHA = false;StartCoroutine("HAHA");}}
IEnumerator HAHA(){while(true){
yield return new WaitForSeconds(0.2f);
_meshRenderer.enabled = false;
yield return new WaitForSeconds(0.2f);
_meshRenderer.enabled = true;}}
private voidOnTriggerEnter(Collider other){if(other.tag.Equals("Player")){switch(gameObject.tag){case"BlueBoll"://zidan
GameObject tmp = Resources.Load("Bullets") as GameObject;
other.gameObject.GetComponent<PlayerShipCtr>().PlayerBullet = tmp;break;case"GreenBoll":
_createGameManager.CellPlayerIsProtected = true;break;case"RedBoll":
_scoreManager.AddScore(100);break;}Destroy(gameObject);}}}
创建管理者
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateGameManagerCtr : MonoBehaviour
{//x --> -3.5 -2 -0.5 1 2.5 3.5// 0// 16 //0 敌机// 1~3 陨石//波次 协同//波次 数量
public GameObject[] EnemyObjects;//爆炸特效
public GameObject[] ParitcleObjects;
public GameObject[] Bolls;
public bool PlayerOver;
public bool CellPlayerIsProtected;
public bool PlayerIsProtected;//存储初始化点的位置
private Vector3[] CreatePos;
private float _timer;voidStart(){//
CellPlayerIsProtected = true;
PlayerIsProtected = true;
PlayerOver = false;
CreatePos = new Vector3[8];for(int i =0; i <7; i++){//
CreatePos[i].Set(-6.5f+ i *1.8f,0,16);}
CreatePos[CreatePos.Length -1].Set(6.5f,0,16);StartCoroutine("IEnumCreateEnemy");}// Update is called once per framevoidUpdate(){
_timer += Time.deltaTime;if(CellPlayerIsProtected){
PlayerIsProtected = true;
CellPlayerIsProtected = false;
_timer =0;}if(_timer >=5.0f){
PlayerIsProtected = false;}}
IEnumerator IEnumCreateEnemy(){int EnemyShipCount =0;while(true){
EnemyShipCount =0;int tmpNumber = Random.Range(8,15);for(int i =0; i < tmpNumber; i++){
EnemyShipCount++;CreateEnemy(EnemyShipCount);
yield return new WaitForSeconds(0.4f);}
yield return new WaitForSeconds(1.5f);}}
public voidCreateEnemy(int shipCount){
GameObject tmpGameObject;if(shipCount %3==0){//敌机
tmpGameObject =Instantiate(EnemyObjects[0], CreatePos[Random.Range(0, CreatePos.Length)], Quaternion.identity);
tmpGameObject.GetComponent<EnemyShipCtr>().Score = Random.Range(10,20);
tmpGameObject.GetComponent<EnemyShipCtr>().Left = Random.Range(0,3);}else{//陨石
tmpGameObject =Instantiate(EnemyObjects[Random.Range(1, EnemyObjects.Length)], CreatePos[Random.Range(0, CreatePos.Length)], Quaternion.identity);
tmpGameObject.GetComponent<AsteroidCtr>().Score = Random.Range(5,10);}if(shipCount %4==0){if(tmpGameObject.tag.Equals(TagManager.EnemyShip)){
tmpGameObject.GetComponent<EnemyShipCtr>().Boll = Bolls[Random.Range(0, Bolls.Length)];}else{
tmpGameObject.GetComponent<AsteroidCtr>().Boll = Bolls[Random.Range(0, Bolls.Length)];}}}
public voidCreateParticleByV3AndIndex(Vector3 CreatePoint,int index){
GameObject tmpGameObject =Instantiate(ParitcleObjects[index], CreatePoint, Quaternion.identity);Destroy(tmpGameObject,2f);}
public voidStopGame(){
PlayerOver = true;StopCoroutine("IEnumCreateEnemy");}}
特殊子弹
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DesBullets : MonoBehaviour
{// Use this for initializationvoidStart(){for(int i =0; i < transform.childCount; i++){
transform.Find(i.ToString()).gameObject.GetComponent<PlayerBulletCtr>().MoveSpeed =10;}}// Update is called once per framevoidUpdate(){if(transform.childCount ==0)Destroy(gameObject);}}
敌机子弹脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBulletCtr : MonoBehaviour
{// Use this for initialization
public int MoveSpeed;
public bool IsDes;
private CreateGameManagerCtr _createGameManager;
private AudioManagerCtr _audioManager;
private ScoreManager _scoreManager;
private Rigidbody _rig;voidStart(){
transform.rotation = Quaternion.Euler(90,0,0);
_scoreManager = GameObject.FindWithTag(TagManager.ScoreManagerName).GetComponent<ScoreManager>();
_audioManager = GameObject.FindWithTag(TagManager.AudioManagerName).GetComponent<AudioManagerCtr>();
_createGameManager = GameObject.FindWithTag(TagManager.CreateManagerName).GetComponent<CreateGameManagerCtr>();
_rig = GetComponent<Rigidbody>();if(null == _rig){
_rig = gameObject.AddComponent<Rigidbody>();}if(MoveSpeed ==0)
MoveSpeed =10;
_rig.useGravity = false;
_rig.velocity = transform.up *-MoveSpeed;}// Update is called once per framevoidUpdate(){}
private voidOnTriggerEnter(Collider other){//敌人//玩家if(other.tag.Equals(TagManager.PlayName)){if(_createGameManager.PlayerIsProtected){Destroy(gameObject);return;}//玩家爆炸
_createGameManager.CreateParticleByV3AndIndex(other.gameObject.transform.position,0);
_audioManager.PlayAudio(1, AudioName.PlyerKill);//音效//互毁Destroy(gameObject);Destroy(other.gameObject);//over
_createGameManager.StopGame();
_audioManager.StopGame();
_scoreManager.StopGame();}//EndPlayerif(other.tag.Equals(TagManager.PlayBulletName)){if(IsDes){Destroy(other.gameObject);Destroy(gameObject);}else{Destroy(other.gameObject);}}//EndPlayBullet}}
敌机脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyShipCtr : MonoBehaviour
{
public int Score;
public int MoveSpeed;
public GameObject EnemyBullet;
public float FireTime;
public Texture ChangeTexture;
public int Left;// -1 1
public GameObject Boll;
private CreateGameManagerCtr _createGameManager;
private AudioManagerCtr _audioManager;
private ScoreManager _scoreManager;
private Rigidbody _rig;
private int _bulletCount;
private float _timer;// Use this for initializationvoidStart(){
_scoreManager = GameObject.FindWithTag(TagManager.ScoreManagerName).GetComponent<ScoreManager>();
_audioManager = GameObject.FindWithTag(TagManager.AudioManagerName).GetComponent<AudioManagerCtr>();
_createGameManager = GameObject.FindWithTag(TagManager.CreateManagerName).GetComponent<CreateGameManagerCtr>();if(FireTime ==0){
FireTime =0.8f;}
transform.rotation = Quaternion.Euler(0,180,0);
_rig = GetComponent<Rigidbody>();if(_rig == null){
_rig = gameObject.AddComponent<Rigidbody>();}if(MoveSpeed ==0)
MoveSpeed =5;
_rig.useGravity = false;ChangeDir();}// Update is called once per framevoidUpdate(){if(_createGameManager.PlayerOver)return;
_timer += Time.deltaTime;if(_timer >= FireTime){
_timer =0;
_bulletCount++;
GameObject tmpGameObject =Instantiate(EnemyBullet, transform.Find("BulletPos").position, Quaternion.identity);
_audioManager.PlayAudio(2, AudioName.EnemyShipShoot);
tmpGameObject.GetComponent<EnemyBulletCtr>().MoveSpeed = Random.Range(8,17);if(_bulletCount %3==0){//不能相互抵消
tmpGameObject.GetComponent<EnemyBulletCtr>().IsDes = false;
tmpGameObject.GetComponent<MeshRenderer>().material.mainTexture = ChangeTexture;}else{//抵消
tmpGameObject.GetComponent<EnemyBulletCtr>().IsDes = true;}}}
private voidChangeDir(){//0 左边//1 不动//2 右边//超出边界就直接反向switch(Left){case0:
_rig.velocity =(transform.forward * MoveSpeed + transform.right * Random.Range(1,4));break;case1:
_rig.velocity =(transform.forward * MoveSpeed);break;case2:
_rig.velocity =(transform.forward * MoveSpeed +-transform.right * Random.Range(1,4));break;}}
private voidOnTriggerEnter(Collider other){//敌人if(_createGameManager.PlayerOver)return;//玩家if(other.tag.Equals(TagManager.PlayName)){//玩家爆炸if(_createGameManager.PlayerIsProtected){
_createGameManager.CreateParticleByV3AndIndex(gameObject.transform.position,1);
_audioManager.PlayAudio(2, AudioName.EnemyShipKill);Destroy(gameObject);
_scoreManager.AddScore(Score);if(Boll != null){
GameObject tmp =Instantiate(Boll, transform.position, Quaternion.identity);Destroy(tmp,3);}return;}
_createGameManager.CreateParticleByV3AndIndex(other.gameObject.transform.position,0);
_createGameManager.CreateParticleByV3AndIndex(gameObject.transform.position,1);
_audioManager.PlayAudio(1, AudioName.PlyerKill);
_audioManager.PlayAudio(2, AudioName.EnemyShipKill);//音效//互毁Destroy(gameObject);Destroy(other.gameObject);
_scoreManager.AddScore(Score);//over
_createGameManager.StopGame();
_audioManager.StopGame();
_scoreManager.StopGame();}//EndPlayerif(other.tag.Equals(TagManager.PlayBulletName)){
_createGameManager.CreateParticleByV3AndIndex(gameObject.transform.position,1);
_audioManager.PlayAudio(2, AudioName.EnemyShipKill);Destroy(gameObject);Destroy(other.gameObject);
_scoreManager.AddScore(Score);if(Boll != null){
GameObject tmp =Instantiate(Boll, transform.position, Quaternion.identity);Destroy(tmp,3);}}//EndPlayBullet}voidFixedUpdate(){if(_rig.transform.position.x <-6.5){
_rig.velocity =(transform.forward * MoveSpeed +-transform.right * Random.Range(1,4));}if(_rig.transform.position.x >6.5){
_rig.velocity =(transform.forward * MoveSpeed + transform.right * Random.Range(1,4));}}}
销毁所有
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KillAll : MonoBehaviour {voidOnTriggerEnter(Collider other){//销毁所有普碰撞的物体Destroy(other.gameObject);}}
玩家子弹脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerBulletCtr : MonoBehaviour {// Use this for initialization
public float MoveSpeed;
private Rigidbody _rig;void Start (){//transform.rotation = Quaternion.Euler(90,0,0);//初始化旋转角度
_rig = GetComponent<Rigidbody>();//获得刚体if(null == _rig)//没有刚体就添加刚体{
_rig = gameObject.AddComponent<Rigidbody>();}
_rig.useGravity = false;//去掉重力if(MoveSpeed ==0)//初始化速度
MoveSpeed =5;//单位速度 方向*速度
_rig.velocity = transform.up * MoveSpeed;}// Update is called once per framevoid Update (){}}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public Text ScoreText;
public GameObject OverGameObject;
private int _tmpScore;voidAwake(){
_tmpScore =0;}
public voidAddScore(int Score){
_tmpScore += Score;
ScoreText.text = string.Format("score: {0}", _tmpScore);}
public voidStopGame(){//OverGameObject.transform.DOScale(Vector3.one, 1);
OverGameObject.SetActive(true);
OverGameObject.transform.Find("OverScore").gameObject.GetComponent<Text>().text
= string.Format("score: {0}", _tmpScore);}
public voidReStart(){
OverGameObject.SetActive(false);
_tmpScore =0;AddScore(_tmpScore);}}
标签管理者
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//标签管理者
public class TagManager
{
public static string PlayName ="Player";
public static string PlayBulletName ="PlayerBullet";
public static string AudioManagerName ="AudioManager";
public static string EnemyName ="Enemy";
public static string EnemyShip ="EnemyShip";
public static string CreateManagerName ="CreateGameManager";
public static string ScoreManagerName ="ScoreManager";}