//生成 public void StartTwoCampBattle(int n1, int n2) { Transform sp = GameObject.Find("SwopPoints").transform; Transform spCamp1 = sp.GetChild(0); Transform spCamp2 = sp.GetChild(1); if (spCamp1.childCount < n1 || spCamp2.childCount < n2) { Debug.LogError("出生点数量不够"); return; } if (tankPerfabs.Length < 2) { Debug.LogError("坦克预设数量不够"); return; } ClearBattle(); battleTanks = new BattleTank[n1 + n2]; for (int i = 0; i < n1; i++) { generateTank(1, i, spCamp1, i); } for (int i = 0; i < n2; i++) { generateTank(2, i, spCamp2, n1 + i); } tankcontrol tankCmp = battleTanks[0].tank; tankCmp.ctrlType = tankcontrol.CtrlType.player; CameraFollow cf = Camera.main.gameObject.GetComponent <CameraFollow>(); GameObject target = tankCmp.gameObject; cf.SetTarget(target); }
public void NetBeAttacked(float att, GameObject attackTank) { Debug.LogError("123213"); if (Hp <= 0) { return; } if (Hp > 0) { Hp -= att; } if (Hp <= 0) { ctrlType = CtrlType.none; GameObject destoryObj = (GameObject)Instantiate(destoryEffect); destoryObj.transform.SetParent(transform, false); destoryObj.transform.localPosition = Vector3.zero; //播放击杀提示 if (attackTank != null) { tankcontrol tankcmp = attackTank.GetComponent <tankcontrol>(); if (tankcmp != null && tankcmp.ctrlType == CtrlType.player) { tankcmp.startDrawKill(); } } } }
//击中目标 public void BeAttacked(float att, GameObject attackTank) { if (Hp <= 0) { return; } Hp -= att; if (ai != null) { ai.OnAttecked(attackTank); } if (Hp <= 0) { Battle.instance.IsWin(attackTank); Debug.Log(attackTank); GameObject destoryObj = (GameObject)Instantiate(destoryEffect); destoryObj.transform.SetParent(transform, false); destoryObj.transform.localPosition = Vector3.zero; ctrlType = CtrlType.none; if (attackTank != null) { tankcontrol Tankcmp = attackTank.GetComponent <tankcontrol>(); if (Tankcmp != null && Tankcmp.ctrlType == CtrlType.player) { Tankcmp.startDrawKill(); } } } }
private void OnCollisionEnter(Collision collision) { tankcontrol tank = collision.gameObject.GetComponent <tankcontrol>(); if (collision.gameObject == tank) { return; } GameObject explodeObj = (GameObject)Instantiate(explode, transform.position, transform.rotation); AudioSource audio = explodeObj.AddComponent <AudioSource>(); audio.spatialBlend = 1; audio.PlayOneShot(explodeClip); Destroy(gameObject); if (tank != null) { float att = GetAttc(); tank.BeAttacked(att, attactTank); } tankcontrol tankcmp = collision.gameObject.GetComponent <tankcontrol>(); if (tankcmp != null && attactTank.name == GameMgr.instance.id) { float att = GetAttc(); tankcmp.SendHit(tankcmp.name, att); } }
//生成场景 private void generateTank(int camp, int num, Transform spCamp, int index) { //throw new NotImplementedException(); Transform trans = spCamp.GetChild(num); Vector3 pos = trans.position; Quaternion rot = trans.rotation; GameObject perfab = tankPerfabs[camp - 1]; GameObject tankObj = (GameObject)Instantiate(perfab, pos, rot); tankcontrol tankCmp = tankObj.GetComponent <tankcontrol>(); battleTanks[index] = new BattleTank(); battleTanks[index].tank = tankCmp; battleTanks[index].camp = camp; }
//有目标,判断目标丢失 void HasTarget() { tankcontrol targetTank = target.GetComponent <tankcontrol>(); Vector3 pos = transform.position; Vector3 targetPos = target.transform.position; if (targetTank.ctrlType == tankcontrol.CtrlType.none) { Debug.Log("目标死亡,丢失目标"); target = null; } else if (Vector3.Distance(pos, targetPos) > sightDistance) { Debug.Log("距离过远,丢失目标"); target = null; } }
//没有目标的情况,搜索视野中的坦克 private void Notarget() { //throw new NotImplementedException(); float minHp = float.MaxValue; GameObject[] targets = GameObject.FindGameObjectsWithTag("Tankk"); for (int i = 0; i < targets.Length; i++) { tankcontrol tank = targets[i].GetComponent <tankcontrol>(); if (tank == null) { continue; } if (targets[i] == gameObject) { continue; } if (Battle.instance.IsSameCamp(targets[i], gameObject)) { continue; } if (tank.ctrlType == tankcontrol.CtrlType.none) { continue; } Vector3 pos = transform.position; Vector3 targetpos = targets[i].transform.position; if (Vector3.Distance(pos, targetpos) > sightDistance) { continue; } if (minHp > tank.Hp) { target = tank.gameObject; minHp = tank.Hp; } } if (target != null) { Debug.Log("获取目标" + target.name); } }