[Unity2D]實現子彈射擊的腳本


 

    先把子彈做成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);
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM