using UnityEngine;
public class Barriar : MonoBehaviour
{
public AudioClip hitAudio;
public void PlayAudio()
{
AudioSource.PlayClipAtPoint(hitAudio, transform.position);
}
}
2.Born
using UnityEngine;
public class Born : MonoBehaviour
{
public GameObject playerPrefab;
public GameObject[] enemyPrefabList;
public bool createPlayer;
// Use this for initialization
void Start()
{
Invoke("BornTank", 1f);
Destroy(gameObject, 1);
}
// Update is called once per frame
void Update()
{
}
private void BornTank()
{
if (createPlayer)
{
Instantiate(playerPrefab, transform.position, Quaternion.identity);
}
else
{
int num = Random.Range(0, 2);
Instantiate(enemyPrefabList[num], transform.position, Quaternion.identity);
}
}
}
3.Bullect
using UnityEngine;
public class Bullect : MonoBehaviour
{
public float moveSpeed = 10;
public bool isPlayerBullect;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Translate(transform.up * moveSpeed * Time.deltaTime, Space.World);
}
private void OnTriggerEnter2D(Collider2D collision)
{
switch (collision.tag)
{
case "Tank":
if (!isPlayerBullect)
{
collision.SendMessage("Die");
Destroy(gameObject);
}
break;
case "Heart":
collision.SendMessage("Die");
Destroy(gameObject);
break;
case "Enemy":
if (isPlayerBullect)
{
collision.SendMessage("Die");
Destroy(gameObject);
}
break;
case "Wall":
Destroy(collision.gameObject);
Destroy(gameObject);
break;
case "Barrier":
if (isPlayerBullect)
{
collision.SendMessage("PlayAudio");
}
Destroy(gameObject);
break;
default:
break;
}
}
}
4.Enemy
using UnityEngine;
public class Enemy : MonoBehaviour
{
//属性值
public float moveSpeed = 3;
private Vector3 bullectEulerAngles;
private float v = -1;
private float h;
//引用
private SpriteRenderer sr;
public Sprite[] tankSprite; //上 右 下 左
public GameObject bullectPrefab;
public GameObject explosionPrefab;
//计时器
private float timeVal;
private float timeValChangeDirection;
private void Awake()
{
sr = GetComponent<SpriteRenderer>();
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
//攻击的时间间隔
if (timeVal >= 3)
{
Attack();
}
else
{
timeVal += Time.deltaTime;
}
}
private void FixedUpdate()
{
Move();
}
//坦克的攻击方法
private void Attack()
{
//子弹产生的角度:当前坦克的角度+子弹应该旋转的角度。
Instantiate(bullectPrefab, transform.position, Quaternion.Euler(transform.eulerAngles + bullectEulerAngles));
timeVal = 0;
}
//坦克的移动方法
private void Move()
{
if (timeValChangeDirection >= 4)
{
int num = Random.Range(0, 8);
if (num > 5)
{
v = -1;
h = 0;
}
else if (num == 0)
{
v = 1;
h = 0;
}
else if (num > 0 && num <= 2)
{
h = -1;
v = 0;
}
else if (num > 2 && num <= 4)
{
h = 1;
v = 0;
}
timeValChangeDirection = 0;
}
else
{
timeValChangeDirection += Time.fixedDeltaTime;
}
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprite[2];
bullectEulerAngles = new Vector3(0, 0, -180);
}
else if (v > 0)
{
sr.sprite = tankSprite[0];
bullectEulerAngles = new Vector3(0, 0, 0);
}
if (v != 0)
{
return;
}
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprite[3];
bullectEulerAngles = new Vector3(0, 0, 90);
}
else if (h > 0)
{
sr.sprite = tankSprite[1];
bullectEulerAngles = new Vector3(0, 0, -90);
}
}
//坦克的死亡方法
private void Die()
{
PlayerManager.Instance.playerScore++;
//产生爆炸特效
Instantiate(explosionPrefab, transform.position, transform.rotation);
//死亡
Destroy(gameObject);
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy")
{
timeValChangeDirection = 4;
}
}
}
5.Explosion
using UnityEngine;
public class Explosion : MonoBehaviour
{
// Use this for initialization
void Start()
{
Destroy(gameObject, 0.167f);
}
// Update is called once per frame
void Update()
{
}
}
6.Heart
using UnityEngine;
public class Heart : MonoBehaviour
{
private SpriteRenderer sr;
public GameObject explosionPrefab;
public AudioClip dieAudio;
public Sprite BrokenSprite;
// Use this for initialization
void Start()
{
sr = GetComponent<SpriteRenderer>();
}
public void Die()
{
sr.sprite = BrokenSprite;
Instantiate(explosionPrefab, transform.position, transform.rotation);
PlayerManager.Instance.isDefeat = true;
AudioSource.PlayClipAtPoint(dieAudio, transform.position);
}
}
7.MapCreation
using System.Collections.Generic;
using UnityEngine;
public class MapCreation : MonoBehaviour
{
//用来装饰初始化地图所需物体的数组。
//0.老家 1.墙 2.障碍 3.出生效果 4.河流 5.草 6.空气墙
public GameObject[] item;
//已经有东西的位置列表
private List<Vector3> itemPositionList = new List<Vector3>();
private void Awake()
{
InitMap();
}
private void InitMap()
{
//实例化老家
CreateItem(item[0], new Vector3(0, -8, 0), Quaternion.identity);
//用墙把老家围起来
CreateItem(item[1], new Vector3(-1, -8, 0), Quaternion.identity);
CreateItem(item[1], new Vector3(1, -8, 0), Quaternion.identity);
for (int i = -1; i < 2; i++)
{
CreateItem(item[1], new Vector3(i, -7, 0), Quaternion.identity);
}
//实例化外围墙
for (int i = -11; i < 12; i++)
{
CreateItem(item[6], new Vector3(i, 9, 0), Quaternion.identity);
}
for (int i = -11; i < 12; i++)
{
CreateItem(item[6], new Vector3(i, -9, 0), Quaternion.identity);
}
for (int i = -8; i < 9; i++)
{
CreateItem(item[6], new Vector3(-11, i, 0), Quaternion.identity);
}
for (int i = -8; i < 9; i++)
{
CreateItem(item[6], new Vector3(11, i, 0), Quaternion.identity);
}
//初始化玩家
GameObject go = Instantiate(item[3], new Vector3(-2, -8, 0), Quaternion.identity);
go.GetComponent<Born>().createPlayer = true;
//产生敌人
CreateItem(item[3], new Vector3(-10, 8, 0), Quaternion.identity);
CreateItem(item[3], new Vector3(0, 8, 0), Quaternion.identity);
CreateItem(item[3], new Vector3(10, 8, 0), Quaternion.identity);
InvokeRepeating("CreateEnemy", 4, 5);
//实例化地图
for (int i = 0; i < 60; i++)
{
CreateItem(item[1], CreateRandomPosition(), Quaternion.identity);
}
for (int i = 0; i < 20; i++)
{
CreateItem(item[2], CreateRandomPosition(), Quaternion.identity);
}
for (int i = 0; i < 20; i++)
{
CreateItem(item[4], CreateRandomPosition(), Quaternion.identity);
}
for (int i = 0; i < 20; i++)
{
CreateItem(item[5], CreateRandomPosition(), Quaternion.identity);
}
}
private void CreateItem(GameObject createCameObject, Vector3 createPosition, Quaternion createRotation)
{
GameObject itemGo = Instantiate(createCameObject, createPosition, createRotation);
itemGo.transform.SetParent(gameObject.transform);
itemPositionList.Add(createPosition);
}
//产生随机位置的方法
private Vector3 CreateRandomPosition()
{
//不生成x=-10,10的两列,y=-8,8正两行的位置
while (true)
{
Vector3 createPosition = new Vector3(Random.Range(-9, 10), Random.Range(-7, 8), 0);
if (!HasThePosition(createPosition))
{
return createPosition;
}
}
}
//用来判断位置列表中是否有这个位置
private bool HasThePosition(Vector3 createPos)
{
for (int i = 0; i < itemPositionList.Count; i++)
{
if (createPos == itemPositionList[i])
{
return true;
}
}
return false;
}
//产生敌人的方法
private void CreateEnemy()
{
int num = Random.Range(0, 3);
Vector3 EnemyPos = new Vector3();
if (num == 0)
{
EnemyPos = new Vector3(-10, 8, 0);
}
else if (num == 1)
{
EnemyPos = new Vector3(0, 8, 0);
}
else
{
EnemyPos = new Vector3(10, 8, 0);
}
CreateItem(item[3], EnemyPos, Quaternion.identity);
}
}
8.Option
using UnityEngine;
using UnityEngine.SceneManagement;
public class Option : MonoBehaviour
{
private int choice = 1;
public Transform posOne;
public Transform posTwo;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
choice = 1;
transform.position = posOne.position;
}
else if (Input.GetKeyDown(KeyCode.S))
{
choice = 2;
transform.position = posTwo.position;
}
if (choice == 1 && Input.GetKeyDown(KeyCode.Space))
{
SceneManager.LoadScene(1);
}
}
}
9.Player
using UnityEngine;
public class Player : MonoBehaviour
{
//属性值
public float moveSpeed = 3;
private Vector3 bullectEulerAngles;
private float timeVal;
private float defendTimeVal = 3;
private bool isDefended = true;
//引用
private SpriteRenderer sr;
public Sprite[] tankSprite; //上 右 下 左
public GameObject bullectPrefab;
public GameObject explosionPrefab;
public GameObject defendEffectPrefab;
public AudioSource moveAudio;
public AudioClip[] tankAudio;
private void Awake()
{
sr = GetComponent<SpriteRenderer>();
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
//是否处于无敌状态
if (isDefended)
{
defendEffectPrefab.SetActive(true);
defendTimeVal -= Time.deltaTime;
if (defendTimeVal <= 0)
{
isDefended = false;
defendEffectPrefab.SetActive(false);
}
}
}
private void FixedUpdate()
{
if (PlayerManager.Instance.isDefeat)
{
return;
}
Move();
//攻击的CD
if (timeVal >= 0.4f)
{
Attack();
}
else
{
timeVal += Time.fixedDeltaTime;
}
}
//坦克的攻击方法
private void Attack()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//子弹产生的角度:当前坦克的角度+子弹应该旋转的角度。
Instantiate(bullectPrefab, transform.position,
Quaternion.Euler(transform.eulerAngles + bullectEulerAngles));
timeVal = 0;
}
}
//坦克的移动方法
private void Move()
{
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprite[2];
bullectEulerAngles = new Vector3(0, 0, -180);
}
else if (v > 0)
{
sr.sprite = tankSprite[0];
bullectEulerAngles = new Vector3(0, 0, 0);
}
if (Mathf.Abs(v) > 0.05f)
{
moveAudio.clip = tankAudio[1];
if (!moveAudio.isPlaying)
{
moveAudio.Play();
}
}
if (v != 0)
{
return;
}
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprite[3];
bullectEulerAngles = new Vector3(0, 0, 90);
}
else if (h > 0)
{
sr.sprite = tankSprite[1];
bullectEulerAngles = new Vector3(0, 0, -90);
}
if (Mathf.Abs(h) > 0.05f)
{
moveAudio.clip = tankAudio[1];
if (!moveAudio.isPlaying)
{
moveAudio.Play();
}
}
else
{
moveAudio.clip = tankAudio[0];
if (!moveAudio.isPlaying)
{
moveAudio.Play();
}
}
}
//坦克的死亡方法
private void Die()
{
if (isDefended)
{
return;
}
PlayerManager.Instance.isDead = true;
//产生爆炸特效
Instantiate(explosionPrefab, transform.position, transform.rotation);
//死亡
Destroy(gameObject);
}
}
10.PlayerManager
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class PlayerManager : MonoBehaviour
{
//属性值
public int lifeValue = 3;
public int playerScore = 0;
public bool isDead;
public bool isDefeat;
//引用
public GameObject born;
public Text playerScoreText;
public Text PlayerLifeValueText;
public GameObject isDefeatUI;
//单例
private static PlayerManager instance;
public static PlayerManager Instance
{
get { return instance; }
set { instance = value; }
}
private void Awake()
{
Instance = this;
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (isDefeat)
{
isDefeatUI.SetActive(true);
Invoke("ReturnToTheMainMenu", 3);
return;
}
if (isDead)
{
Recover();
}
playerScoreText.text = playerScore.ToString();
PlayerLifeValueText.text = lifeValue.ToString();
}
private void Recover()
{
if (lifeValue <= 0)
{
//游戏失败,返回主界面
isDefeat = true;
Invoke("ReturnToTheMainMenu", 3);
}
else
{
lifeValue--;
GameObject go = Instantiate(born, new Vector3(-2, -8, 0), Quaternion.identity);
go.GetComponent<Born>().createPlayer = true;
isDead = false;
}
}
private void ReturnToTheMainMenu()
{
SceneManager.LoadScene(0);
}
}
坦克大战1.Barriarusing UnityEngine;public class Barriar : MonoBehaviour{ public AudioClip hitAudio; public void PlayAudio() { AudioSource.PlayClipAtPoint(hitAudio, transform.position); }}2.Bornusing UnityEngine;public class