版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang_lvril/article/details/79783950
1.Player预制体
添加BoxCollider2D RigidBody2D Gravity Scale=0
移动转向:移动 transform.Translate(Vector.方向*速度*Time.fixdDeltaTime,Space.World);
转向 通过改变SpriteRender的Soprite属性。SpriteRender sr=GetComponent<SpriteRender>();
public Sprite[] TankSprite; if(h>0) sr.Sprite=tankSprite[]; bullectEulerAngles = new Vector3(0, 0, 90);
攻击:if((Input.GetKeyDown(Keycode.Space)) private Vector3 bullectEulerAngles;
Instantiae(bulletPrefab,transform.position,Quaternion.Eular(transform.eulerAngles+bullectEulerAngles));
攻击CD:private float timeAttack =0.4f ;
FixedUpdate() 固定物理帧 { Move(); if(timeAttack==0.4){ Attack() ;}else { timeAttack+= Time.fixedDeltaTime; } }
无敌3s:private bool isDefended = true; Update()=>if(isDefende) defendPrefab.SetActive=ture;
private bool isDefended = true; defendTime -= Time.deltaTime; isDefended = false;
defendPrefab.SetActive(false);
defendPrefab.SetActive(false);
死亡: Die()=>if (isDefended) return; Instantiate(explosionPrefab, transform.position, transform.rotation);
Destroy(gameObject); PlayerManager._instance.isDead = true;
2.子弹预制体
添加BoxCollider2D ,RigidBody2D Gravity Scale=0; public bool isPlayerBullect;
移动:transform.Translate(transform.up* moveSpeed * Time.deltaTime, Space.World);
碰撞:Switch(collision.tag)=> Case "Tank": if(!isPlayerBullect)=>collision.SendMessage("Die");Destory;
Case "Enemy": if(isPlayerBullet)=>collision.SendMessage("Die").Destory(); ... ... ... ... ... ...
3.敌人AI
随机移动:private float changDir=3,float v, h=-1;
if(changDir>=3)=>int num = Random.Range(0, 8);
=>if(num>5)=>v=-1;h=0; ... ... ... ... changDir=0; else=> changDir+=Time.DealtTime;
移动转向和Player一样。
自动攻击:取消Input.GetKeyDown 同Player。
死亡:同Player。PlayerManager.Instance.Score++;
4.PlayerManager
public static PlayerManager Instance;
public bool isDead; //玩家死亡 public int lifeValue = 3; //生命
public bool isDefeat; //游戏结束 public int playScore = 0; //得分
public bool isDefeat; //游戏结束 public int playScore = 0; //得分
复活:private void Recover()=>if(lifeValue<=0) isDefeat=true; Invoke("ReturnMain",2);
else=>lifeValue--; GameObject go = Instantiate(born, new Vector3(-2, -8, 0), Quaternion.identity);
go.GetComponent<Born>().createPlayer = transform; isDead = false;
go.GetComponent<Born>().createPlayer = transform; isDead = false;
Update()=> if(isDefeat)=>Invoke("ReturnMain",2);return; if(isDead)=>Recover(); hp.text=lifeValue.ToString();
5.随机生成地图
public GameObject[ ] item; //初始化地图数组 //0 老家 //1 墙 //2 障碍 //3 出生 //4河流 //5 草 // 空气墙
private List<Vector3> itemPos = new List<Vector3>();
实例化方法 Void CreateItem(GameObject createGame, Vector3 pos, Quaternion quaternion)
=>GameObject itmeGo = Instantiate(createGame, pos, quaternion);
itmeGo.transform.SetParent(gameObject.transform);
itemPos.Add(pos);
判断该位置是否存在列表中
private bool HasThePos(Vector3 createPos) {
for (int i = 0; i < itemPos.Count; i++) {
if (createPos == itemPos[i]) {
return true;
return false;
}
随机产生位置
private Vector3 CreateRandomPos() {
while (true) {
Vector3 createPosition = new Vector3(Random.Range(-9, 10), Random.Range(-7, 8), 0);
private Vector3 CreateRandomPos() {
while (true) {
Vector3 createPosition = new Vector3(Random.Range(-9, 10), Random.Range(-7, 8), 0);
if (!HasThePos(createPosition)) {
return createPosition;
}
return createPosition;
}
//敌人随机位置
private void CreateEnemy() {
int num = Random.Range(0, 3);
Vector3 enemyPos = new Vector3();
if (num == 0)
enemyPos = new Vector3(-10, 8, 0);
CreateItem(item[3], enemyPos, Quaternion.identity);
}
private void CreateEnemy() {
int num = Random.Range(0, 3);
Vector3 enemyPos = new Vector3();
if (num == 0)
enemyPos = new Vector3(-10, 8, 0);
CreateItem(item[3], enemyPos, Quaternion.identity);
}
Awake(){
//家
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);
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);
//玩家
GameObject go = Instantiate(item[3], new Vector3(-2, -8, 0), Quaternion.identity);
go.GetComponent<Born>().createPlayer = true;
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);
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 = -11; i < 12; i++) {
CreateItem(item[6], new Vector3(i, 9, 0), Quaternion.identity);
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);
CreateItem(item[6], new Vector3(11, i, 0), Quaternion.identity);
}
//地图
for (int i = 0; i < 60; i++)
CreateItem(item[1], CreateRandomPos(), Quaternion.identity);
CreateItem(item[2], CreateRandomPos(), Quaternion.identity);
CreateItem(item[4], CreateRandomPos(), Quaternion.identity);
CreateItem(item[5], CreateRandomPos(), Quaternion.identity);
for (int i = -11; i < 12; i++) {
CreateItem(item[6], new Vector3(i, 9, 0), Quaternion.identity);
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);
CreateItem(item[6], new Vector3(11, i, 0), Quaternion.identity);
}
//地图
for (int i = 0; i < 60; i++)
CreateItem(item[1], CreateRandomPos(), Quaternion.identity);
CreateItem(item[2], CreateRandomPos(), Quaternion.identity);
CreateItem(item[4], CreateRandomPos(), Quaternion.identity);
CreateItem(item[5], CreateRandomPos(), Quaternion.identity);
}
6.其他
添加声音:Public AudioClip audio; AudioSource.PlayClipAtPoint(dieAudio, transform.position);