S老师 打飞机 学习
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 奖励 6 /// </summary> 7 public class Award : MonoBehaviour { 8 9 public int type = 0; //0 gun 1 explode 10 11 public float speed = 1.5f; 12 13 14 void Update(){ 15 this.transform.Translate( Vector3.down*Time.deltaTime*speed ); 16 if(this.transform.position.y<=-4.5f){ 17 Destroy(this.gameObject); 18 } 19 } 20 }
1 using UnityEngine; 2 using System.Collections; 3 4 5 /// <summary> 6 /// 背景移动 7 /// </summary> 8 public class BackgroundTransform : MonoBehaviour { 9 10 public static float moveSpeed = 2f; 11 12 void Update () { 13 this.transform.Translate( Vector3.down * moveSpeed * Time.deltaTime ); 14 Vector3 postion = this.transform.position; 15 if(postion.y<=-8.52f){ 16 this.transform.position = new Vector3(postion.x,postion.y+8.52f*2,postion.z ); 17 } 18 } 19 }
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 子弹 6 /// </summary> 7 public class Bullet : MonoBehaviour { 8 9 public float speed = 2; 10 11 // Update is called once per frame 12 void Update () { 13 transform.Translate( Vector3.up * speed *Time.deltaTime ); 14 if(transform.position.y>4.3f){ 15 Destroy(this.gameObject); 16 } 17 } 18 19 void OnTriggerEnter2D(Collider2D other) { 20 if(other.tag=="Enemy"){ 21 if(!other.GetComponent<Enemy>().isDeath){ 22 other.gameObject.SendMessage("BeHit"); 23 GameObject.Destroy(this.gameObject); 24 } 25 } 26 } 27 28 }
1 using UnityEngine; 2 using System.Collections; 3 4 public enum EnemyType{ 5 smallEnemy, 6 middleEnemy, 7 bigEnemy 8 } 9 10 /// <summary> 11 /// 敌人 12 /// </summary> 13 public class Enemy : MonoBehaviour { 14 15 public int hp = 1; 16 17 public float speed = 2; 18 19 public int score = 100; 20 21 public EnemyType type= EnemyType.smallEnemy; 22 23 public bool isDeath = false; 24 25 public Sprite[] explosionSprites; 26 27 private float timer=0; 28 29 public int explosionAnimationFrame=10; 30 31 private SpriteRenderer render; 32 33 public float hitTimer = 0.2f; 34 private float resetHitTime ; 35 36 public Sprite[] hitSprites; 37 38 // Use this for initialization 39 void Start () { 40 render = this.GetComponent<SpriteRenderer>(); 41 42 resetHitTime=hitTimer; 43 hitTimer=0; 44 } 45 46 // Update is called once per frame 47 void Update () { 48 this.transform.Translate( Vector3.down*speed*Time.deltaTime ); 49 if(this.transform.position.y<=-5.6f){ 50 Destroy(this.gameObject); 51 } 52 53 if(isDeath){ 54 timer+=Time.deltaTime;// 0 55 int frameIndex = (int)(timer/(1f/explosionAnimationFrame)); 56 if(frameIndex>=explosionSprites.Length){ 57 //destroy 58 Destroy(this.gameObject); 59 }else{ 60 render.sprite= explosionSprites[frameIndex]; 61 } 62 }else{ 63 if(type==EnemyType.middleEnemy||type==EnemyType.bigEnemy){ 64 if(hitTimer>=0){ 65 hitTimer-=Time.deltaTime; 66 67 int frameIndex = (int)((resetHitTime-hitTimer)/(1f/explosionAnimationFrame)); 68 frameIndex%=2; 69 render.sprite= hitSprites[frameIndex]; 70 } 71 } 72 } 73 } 74 75 public void BeHit(){ 76 hp-=1; 77 // explosion 78 if(hp<=0){ 79 toDie(); 80 }else{ 81 hitTimer=resetHitTime; 82 } 83 } 84 85 private void toDie(){ 86 if(!isDeath){ 87 isDeath=true; 88 GameManager._instance.score+=score; 89 } 90 } 91 }
1 using UnityEngine; 2 using System.Collections; 3 4 public enum GameState{ 5 Runing, 6 Pause 7 } 8 9 /// <summary> 10 /// 游戏管理 11 /// </summary> 12 public class GameManager : MonoBehaviour { 13 14 public static GameManager _instance; 15 16 public int score=0; 17 18 private GUIText guiText; 19 public GameState gameState = GameState.Runing; 20 21 void Awake(){ 22 _instance=this; 23 guiText=GameObject.FindGameObjectWithTag("ScoreGUI").GetComponent<GUIText>(); 24 } 25 26 // Update is called once per frame 27 void Update () { 28 guiText.text="Score:"+score; 29 } 30 public void transfromGameState(){ 31 if(gameState==GameState.Runing){ 32 pauseGame(); 33 }else if(gameState==GameState.Pause){ 34 continueGame(); 35 } 36 } 37 38 public void pauseGame(){ 39 Time.timeScale=0;// time.delatTime = 0 40 gameState=GameState.Pause; 41 } 42 public void continueGame(){ 43 Time.timeScale=1; 44 gameState=GameState.Runing; 45 } 46 }
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 游戏暂停 6 /// </summary> 7 public class GamePause : MonoBehaviour { 8 9 void OnMouseUpAsButton() { 10 print ("click me!"); 11 GameManager._instance.transfromGameState(); 12 13 GetComponent<AudioSource>().Play(); 14 } 15 16 }
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 飞机的枪 6 /// </summary> 7 public class Gun : MonoBehaviour { 8 9 public float rate =0.2f; 10 11 public GameObject bullet; 12 13 14 public void fire(){ 15 GameObject.Instantiate(bullet,transform.position,Quaternion.identity ); 16 } 17 18 public void openFire(){ 19 InvokeRepeating("fire",1,rate); 20 } 21 22 public void stopFire(){ 23 CancelInvoke("fire"); 24 } 25 26 }
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 飞机 6 /// </summary> 7 public class Hero : MonoBehaviour { 8 9 public bool animation = true; 10 11 public int frameCountPersconds = 10; 12 13 public float timer = 0; 14 15 public Sprite[] sprites; 16 17 public float superGunTime = 10f; 18 19 public Gun gunTop; 20 public Gun gunLeft; 21 public Gun gunRight; 22 23 private float resetSuperGunTime ; 24 25 private SpriteRenderer spriteRender; 26 27 private bool isMouseDown = false; 28 29 private Vector3 lastMousePosition = Vector3.zero; 30 31 private Transform hero; 32 33 private int gunCount =1; 34 35 void Start(){ 36 spriteRender = this.GetComponent<SpriteRenderer>(); 37 hero = GameObject.FindGameObjectWithTag("Player").transform; 38 39 resetSuperGunTime = superGunTime; 40 superGunTime=0; 41 42 gunTop.openFire(); 43 } 44 45 // Update is called once per frame 46 void Update () { 47 if(animation){ 48 timer+=Time.deltaTime;// 1f/frameCountPersconds 49 int frameIndex = (int)(timer/(1f/frameCountPersconds)); 50 int frame = frameIndex%2; 51 spriteRender.sprite = sprites[frame]; 52 } 53 if(Input.GetMouseButtonDown(0)){ 54 isMouseDown=true; 55 } 56 if(Input.GetMouseButtonUp(0)){ 57 isMouseDown=false; 58 lastMousePosition = Vector3.zero; 59 } 60 if(isMouseDown && GameManager._instance.gameState==GameState.Runing ){ 61 if(lastMousePosition!=Vector3.zero){ 62 //Camera.main.ScreenToWorldPoint(Input.mousePosition) 63 //print (Camera.main.ScreenToWorldPoint(Input.mousePosition)); 64 Vector3 offset = Camera.main.ScreenToWorldPoint(Input.mousePosition) -lastMousePosition; 65 66 transform.position = transform.position+offset; 67 checkPosition(); 68 } 69 lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 70 } 71 superGunTime-=Time.deltaTime; 72 if(superGunTime>0){ 73 if(gunCount==1){ 74 transformToSuperGun(); 75 } 76 }else{ 77 if(gunCount==2){ 78 tranformToNormalGun(); 79 } 80 } 81 } 82 83 private void transformToSuperGun(){ 84 gunCount=2; 85 gunLeft.openFire(); 86 gunRight.openFire(); 87 gunTop.stopFire(); 88 } 89 private void tranformToNormalGun(){ 90 gunCount=1; 91 92 gunLeft.stopFire(); 93 gunRight.stopFire(); 94 gunTop.openFire(); 95 } 96 97 98 private void checkPosition(){ 99 //check x -2.22f +2.22f 100 // check y -3.9 3.4 101 Vector3 pos = transform.position; 102 float x = pos.x; 103 float y = pos.y; 104 if(x<-2.22f){ 105 x=-2.22f; 106 } 107 if(x>2.22f){ 108 x=2.22f; 109 } 110 if(y<-3.9f){ 111 y=-3.9f; 112 } 113 if(y>3.4f){ 114 y=3.4f; 115 } 116 transform.position= new Vector3(x,y,0); 117 } 118 119 public void OnTriggerEnter2D(Collider2D collider){ 120 if(collider.tag=="Award"){ 121 GetComponent<AudioSource>().Play(); 122 Award award = collider.GetComponent<Award>(); 123 if(award.type==0){ 124 //transform gun 125 superGunTime=resetSuperGunTime; 126 Destroy(collider.gameObject); 127 } 128 } 129 } 130 }
1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 敌人孵化 6 /// </summary> 7 public class Spawn : MonoBehaviour { 8 9 public GameObject enemy0Prefab; 10 public GameObject enemy1Prefab; 11 public GameObject enemy2Prefab; 12 13 14 public GameObject awardType0Prefab; 15 public GameObject awardType1Prefab; 16 17 public float enemy0Rate = 0.5f; 18 public float enemy1Rate = 5f; 19 public float enemy2Rate = 8f; 20 21 public float awardType0Rate = 7; 22 23 public float awardType1Rate = 10; 24 25 // Use this for initialization 26 void Start () { 27 InvokeRepeating("createEnemy0",1,enemy0Rate); 28 InvokeRepeating("createEnemy1",3,enemy1Rate); 29 InvokeRepeating("createEnemy2",6,enemy2Rate); 30 31 InvokeRepeating("createAwardType0",10,awardType0Rate); 32 InvokeRepeating("createAwardType1",10,awardType1Rate); 33 34 35 } 36 37 // Update is called once per frame 38 void Update () { 39 40 } 41 42 public void createEnemy0(){ 43 float x = Random.Range(-2.15f,2.15f); 44 GameObject.Instantiate(enemy0Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity); 45 46 } 47 public void createEnemy1(){ 48 float x = Random.Range(-2.04f,2.04f); 49 GameObject.Instantiate(enemy1Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity); 50 51 } 52 public void createEnemy2(){ 53 float x = Random.Range(-2.04f,2.04f); 54 GameObject.Instantiate(enemy2Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity); 55 56 } 57 58 59 public void createAwardType0(){ 60 GetComponent<AudioSource>().Play(); 61 float x = Random.Range(-2.1f,2.1f); 62 GameObject.Instantiate(awardType0Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity); 63 } 64 public void createAwardType1(){ 65 GetComponent<AudioSource>().Play(); 66 float x = Random.Range(-2.1f,2.1f); 67 GameObject.Instantiate(awardType1Prefab,new Vector3(x,transform.position.y,0),Quaternion.identity); 68 } 69 }
视频:https://pan.baidu.com/s/1jHTh3oy
项目:https://pan.baidu.com/s/1sljipdF