Unity-3D捕鱼达人小游戏开发 —— 炮台子弹发射
2018-04-10 本文已影响0人
一世长安乱
为子弹创建出生地
这里写图片描述
在点击按钮的时候一样会射出子弹,使用
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);
}
}
}