Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹

版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以*转载,但必须加入完整的版权声明

目标

Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹

  • 子弹的消失
  • 当子弹命中自身时不可发射子弹

子弹的消失

  • 首先打开我们的PlatformRig预制体,并找到Tower把Tag更改为Tower并在其子节点添加一个Cylinder并把Scale的数值调整为(5,1,5)并移除所Transform以外的所有组件,然后添加Mesh Colider,接着把Tag也改为Tower,随后打开我们的Projectile脚本编写如下代码:
public class Projectile : MonoBehaviour
{
private Lober lober;
private Tank ply; private void Start()
{
// 取得抛物线组件lober
lober = GetComponent<Lober>(); // 取得玩家组建ply
ply = GameObject.FindWithTag("Player").GetComponent<Tank>();
} // 把子弹跟其他物体碰撞的脚本写在这里
private void OnCollisionEnter(Collision collision)
{
// 子弹跟谁发生了碰撞?
if (collision.gameObject.tag == "Arch")
{
print("你碰到了圆环!"); lober.endPos = ply.transform.position; lober.enabled = true; }
else if (collision.gameObject.tag == "Tower")
{
print("你碰到了砖块!"); // Step1:怎么取得砖块对象? // Step2:Unity中,用什么方法销毁一个对象?
//Destroy(collision.gameObject); // 把整个塔都销毁了!
//collision.gameObject.GetComponent<Tower>().DropTower(); // 塔向下销毁一层 // Step3: 销毁子弹
Destroy(this.gameObject);
}
}
}
  • 这样就能实现我们想要的效果了。

当子弹命中自身时不可发射子弹

  • 打开我们的Tank脚本增加一个Bool变量,注意这个变量得用Public命名,方便后续其他脚本的调用

    然后把我们的Update函数修改至如下:
 void Update()
{
// 如果游戏结束,就不处理子弹发射操作了!
if (isGameOver)
return; // 发射子弹
if (Input.GetButton("Fire1")
&& Time.time - lastFireTime > 0.2f)
{
// 实例化(从预制体克隆)一个子弹
var transProj = Instantiate(projPrefab).transform; // 设置子弹的位置在坦克设定好的炮口位置
transProj.SetParent(this.transform, false);
transProj.position = shotPos.position;
Vector3 v = shotPos.forward * 100;
transProj.GetComponent<Rigidbody>().AddForce(v, ForceMode.Impulse); Destroy(transProj.gameObject, 2f); lastFireTime = Time.time;
}
}

随后打开我们的Projectile脚本把代码修改如下:

public class Projectile : MonoBehaviour
{
private Lober lober;
private Tank ply; private void Start()
{
// 取得抛物线组件lober
lober = GetComponent<Lober>(); // 取得玩家组建ply
ply = GameObject.FindWithTag("Player").GetComponent<Tank>();
} // 把子弹跟其他物体碰撞的脚本写在这里
private void OnCollisionEnter(Collision collision)
{
// 子弹跟谁发生了碰撞?
if (collision.gameObject.tag == "Arch")
{
print("你碰到了圆环!"); lober.endPos = ply.transform.position; lober.enabled = true; ply.isGameOver = true;
}
else if (collision.gameObject.tag == "Tower")
{
print("你碰到了砖块!"); // Step1:怎么取得砖块对象? // Step2:Unity中,用什么方法销毁一个对象?
//Destroy(collision.gameObject); // 把整个塔都销毁了!
//collision.gameObject.GetComponent<Tower>().DropTower(); // 塔向下销毁一层 // Step3: 销毁子弹
Destroy(this.gameObject);
}
}
}

这样就能实现我们的目标了

上一篇:[知了堂学习笔记]_用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)


下一篇:用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波