先把子彈做成prefab組件,添加剛體、碰撞器和腳本。
using UnityEngine; using System.Collections; public class Rocket : MonoBehaviour { public GameObject explosion; // 爆炸的效果Prefab組件(一個爆炸的動畫) void Start () { // 設置兩秒鍾之后銷毀子彈對象 Destroy(gameObject, 2); } // 爆炸的方法 void OnExplode() { // 創建一個四元數 Quaternion,取一個隨機的旋轉角度 // Quaternion.Euler 歐拉角 // 返回一個旋轉角度,繞y軸旋轉y度,繞x軸旋轉x度,繞z軸旋轉z度。 Quaternion randomRotation = Quaternion.Euler(0f, 0f, Random.Range(0f, 360f)); // 初始化explosion的實例 Instantiate(explosion, transform.position, randomRotation); } void OnTriggerEnter2D (Collider2D col) { // 如果子彈碰撞到敵人 if(col.tag == "Enemy") { // 找到敵人對應的腳本,調用其Hurt方法,敵人掉血 col.gameObject.GetComponent<Enemy>().Hurt(); // 調用爆炸方法 OnExplode(); // 銷毀當前的子彈對象 Destroy (gameObject); } // 如果碰撞到補充物體,BombPickup else if(col.tag == "BombPickup") { // 找到其對應的腳本,調用Explode方法,物體爆炸 col.gameObject.GetComponent<Bomb>().Explode(); // 銷毀碰撞的物體對象 Destroy (col.transform.root.gameObject); // 銷毀當前的子彈對象 Destroy (gameObject); } // 如果碰撞到非玩家的其他碰撞器 else if(col.gameObject.tag != "Player") { // 調用爆炸效果,銷毀子彈 OnExplode(); Destroy (gameObject); } } }
創建子彈發出的槍口對象和腳本,注意這個槍口是一個Empty GameObject,記錄子彈發出的位置。給改游戲對象添加音頻和腳本。
using UnityEngine; using System.Collections; public class Gun : MonoBehaviour { public Rigidbody2D rocket; // 子彈 Prefab public float speed = 20f; // 子彈飛行速度 private PlayerControl playerCtrl; // 玩家控制腳本 private Animator anim; // 動畫管理器 void Awake() { // 獲取對象根目錄(也就是對頂層的對象)的動畫管理器和玩家控制腳本 anim = transform.root.gameObject.GetComponent<Animator>(); playerCtrl = transform.root.GetComponent<PlayerControl>(); } void Update () { // 開火按鈕按下 if(Input.GetButtonDown("Fire1")) { // 設置動畫控制器的Trigger參數Shoot,表示播放射擊動畫 anim.SetTrigger("Shoot"); // 播放音頻 audio.Play(); // 玩家對象面向右邊 if(playerCtrl.facingRight) { // 初始化子彈 Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D; // velocity直接給物體一個固定的移動速度 bulletInstance.velocity = new Vector2(speed, 0); } else { // 子彈向左邊旋轉 Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,180f))) as Rigidbody2D; bulletInstance.velocity = new Vector2(-speed, 0); } } } }