Unity-3D捕魚達人小遊戲開發 —— 炮臺子彈發射
阿新 • • 發佈:2019-01-29
為子彈創建出生地
在點選按鈕的時候一樣會射出子彈,使用
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);
}
}
}