1. 程式人生 > >Unity-3D捕魚達人小遊戲開發 —— 炮臺子彈發射

Unity-3D捕魚達人小遊戲開發 —— 炮臺子彈發射

為子彈創建出生地
這裡寫圖片描述

在點選按鈕的時候一樣會射出子彈,使用

EventSystem.current.IsPointerOverGameObject() == false;

來解決,但是現在一個子彈都射不出來,需要將背景的屬性修改,是否是射線檢測的目標
這裡寫圖片描述
給子彈新增屬性指令碼檔案,新增碰撞體
BulletAttribute.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletAttribute : MonoBehaviour {
    // 子彈速度
public float speed; // 子彈傷害 public int damage; // 子彈爆炸後網的形狀 public GameObject webPrefab; private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag == "Border"){ Destroy(gameObject); } if (collision.tag == "Fish"){ // 碰到魚的時候就例項化網
GameObject web = Instantiate(webPrefab); web.transform.SetParent(gameObject.transform.parent, false); web.transform.position = gameObject.transform.position; // 獲取到網的屬性,給網附加傷害 web.GetComponent<WebAttribute>().damage = damage; // 銷燬魚
Destroy(gameObject); } } }

這裡寫圖片描述
這裡寫圖片描述
GameController.cs關於開火的方法

void Fire(){
        // 當前使用的子彈
        GameObject[] usingBullets = bulletObjects1;
        // 發射子彈中的哪一種
        int bulletIndex;
        // 如果按下滑鼠左鍵,並且判斷是否和UI相撞,解決UI穿透
        if (Input.GetMouseButtonDown(0) && EventSystem.current.IsPointerOverGameObject() == false){
            // 加四次錢換一次炮臺
            switch(costIndex / 4)
            {
                case 0:
                    usingBullets = bulletObjects1;
                    break;
                case 1:
                    usingBullets = bulletObjects2;
                    break;
                case 2:
                    usingBullets = bulletObjects3;
                    break;
                case 3:
                    usingBullets = bulletObjects4;
                    break;
                case 4:
                    usingBullets = bulletObjects5;
                    break;
            }
            // 如果等級大於20級,那資源就不夠,陣列就會越界,
            bulletIndex = (lv % 10 >= 9) ? 9 : lv % 10;

            // 例項化
            GameObject bullet = Instantiate (usingBullets [bulletIndex]);
            // 設定父體,false:不保留世界座標
            bullet.transform.SetParent (bulletsHolder, false);
            // 調節bullet的localPosition和localRotation
            bullet.transform.position = 
                gunObjects [costIndex / 4].transform.Find ("FirePosition").transform.position;
            bullet.transform.rotation = 
                gunObjects [costIndex / 4].transform.Find ("FirePosition").transform.rotation;

            // 給子彈新增傷害
            bullet.GetComponent<BulletAttribute>().damage = shootCosts[costIndex];


            // 給子彈加上直線移動指令碼
            // 調整子彈方向
            bullet.AddComponent<Ef_AutoMove>().dir = Vector3.up;
            // 調整子彈速度
            bullet.GetComponent<Ef_AutoMove>().speed = bullet.GetComponent<BulletAttribute>().speed;
}

子彈爆炸後會有漁網,需要給漁網的預製件新增屬性指令碼檔案,還要新增碰撞體
WebAttribute.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WebAttribute : MonoBehaviour
{
    // 消失時間
    public float disapperTime;
    // 網的傷害
    public int damage;

    private void Start()
    {
        // 時間一到就銷燬自己
        Destroy(gameObject, disapperTime);
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Fish")
        {
            // 給魚發訊息讓魚受傷,傳入傷害值
            collision.SendMessage("ReceiveDamage", dama
                                  ge);
        }
    }

}