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

版权申明:

  • 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
  • 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)

目标

在这里插入图片描述

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

子弹的消失

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

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

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值