版权申明:

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

目标

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

子弹的消失

  • 首先打开我们的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);
}
}
}

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

Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹的更多相关文章

  1. Fire Balls 08——音效的添加

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  2. Fire Balls 05——坦克和子弹的制作以及炮台发射子弹

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  3. Fire Balls 05——子弹的命中及后续效果

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  4. Demo_敌军坦克生成,坦克移动(可以拓展发射子弹,敌军消失获取分数或者添加动画,声音功能)

    using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //坦克面积结构体对象 public ...

  5. unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机

    -------小基原创,转载请给我一个面子 主角都能移动了,那不得做点什么伸张正义,守护世界和平的事嘛,拿起家伙biu~biu~biu~ 首先得做一个好人和一个坏人 老规矩,Canvas下创建两个Im ...

  6. Demo_CS(移动,切换枪支,发射子弹)

    using UnityEngine; using System.Collections; public class Gun : MonoBehaviour { private Animator ani ...

  7. Demon_Tank (坦克移动发射子弹)

    using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //子弹预设体 public Game ...

  8. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)

    一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...

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

    一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...

随机推荐

  1. centos里的压缩解压命令tar总结

    压缩 tar czvf 压缩文件名称.tar.gz 文件或者目录名称 比如:tar czvf backup.tar.gz /etc,把/etc目录打包成文件backup.tar.gz c是打包 z是g ...

  2. Android studio中遇到的问题

    首先声明只是Android studio使用中遇到的问题纯属个人学习笔记,有什么不对的可以留言. 将脱壳后的java文件拖入到Android studio android studio 首先提示是ER ...

  3. 60 网络编程(二)——URL

    认识URI.URL.URN 详细请参考:https://blog.51cto.com/xoyabc/1905492 URI:uniform resource Indent 统一资源标识符 URL:un ...

  4. 【模板】LCT

    核心思想: 动态维护一个森林.支持删边,加边,查询链信息等很多操作. 由若干棵$Splay$组成,每棵$Splay$维护一条链,以深度作为关键字. 也就是说$Splay$的中序遍历相当于从上到下遍历这 ...

  5. k8s-架构中各个组件介绍

    参考链接:https://github.com/opsnull/follow-me-install-kubernetes-cluster kubernetes 概述 1.kubernetes 是什么 ...

  6. Net操作RabbitMQ

    原文:Net操作RabbitMQ 文章目录 1 安装 2 管理界面 3 RabbitMQ的基本概念 4 RabbitMQ的六种工作模式 4.1 简单模式 4.2 工作模式 4.3 发布/订阅模式 4. ...

  7. C# Modbus 数据读取 使用NModBus4库

    ModBus通讯协议 方法名 作用 所需参数 返回值 对应功能码 ReadCoils 读取DO的状态 从站地址(8位) byte slaveAddress 起始地址(16位) ushort start ...

  8. javascript query string

    function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...

  9. 实验代码:const* 和 const&

  10. 腾讯java面试经验 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.腾讯等公司offer,岗位是Java后端开发,因为发展原因最终选择去了腾讯,入职一年时间了,也成为了面试官,之 ...