1. 程式人生 > >塔防遊戲學習日記(二)之朝敵人發射子彈

塔防遊戲學習日記(二)之朝敵人發射子彈

one for component targe instant .cn times code 至少

  檢測到炮塔內敵人進入以後,當然下一步就是要向他們發射子彈。

  接下來我們來做朝敵人發射子彈的相關操作。

  分析一下,要向敵人發射子彈,需要有攻擊速度,簡單的計時器,子彈預設體,發射位置。

  首先在UNITY裏炮塔下面創建一個子物體位於炮口附近用於作為子彈的發射位置。

  技術分享

  接下來就是寫腳本了,在炮塔的腳本下面寫。

  先掛出腳本,再講一些註意事項。

  

public class TurretAttack : MonoBehaviour {

    public List<GameObject> enemys = new List<GameObject>();
    
public Transform head; private void OnTriggerEnter(Collider other) { if (other.tag == "enemy") { enemys.Add(other.gameObject); } } private void OnTriggerExit(Collider other) { if (other.tag == "enemy") { enemys.Remove(other.gameObject); } }
public float attackTimes = 1;//控制攻擊速度 private float times=0;//計時器控制攻擊速度 public GameObject buttlePerfab;//子彈預制體 public Transform firePosition;//定義子彈發射點 private void Start() { times = attackTimes;//確保至少發射一枚子彈 } private void Update() { for (int i = 0; i <= enemys.Count - 1
; i++) { //敵人在炮塔範圍內銷毀後移除集合 if (enemys[i] == null) { enemys.RemoveAt(i); } } //在進入炮塔範圍後開始計時 if (enemys.Count > 0) { times += Time.deltaTime; } if (enemys.Count > 0)//這個是改變炮塔朝向的,暫時不必理會 { Vector3 targetPosition = enemys[0].transform.position; targetPosition.y = head.position.y; head.LookAt(targetPosition); } if (enemys.Count>0&&times >= attackTimes)//判斷發射條件 { times -= attackTimes; attack(); } } void attack()//攻擊方法 { GameObject bullet= GameObject.Instantiate(buttlePerfab, firePosition.position, firePosition.rotation); bullet.GetComponent<StaTurBullet>().SetTarget(enemys[0].transform);//調用StaTurBullet中的制定目標方法 } }

大約就是這樣了,別忘了在unity裏指定子彈預制體和發射點,不然會報空引用異常。

註意這時候實例化的子彈上如果沒寫腳本的話,子彈會停在那,而不會飛出,下次寫子彈的腳本。

技術分享

子彈預制體隨便做就行了,註意添加剛體,istrigger,取消重力

  

  

塔防遊戲學習日記(二)之朝敵人發射子彈