版权申明:

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

目标

  • 预制体Tag的更改
  • 子弹脚本的编写
  • 子弹碰到圆环后反弹

预制体Tag的更改

  • 首先我们先打开我们的砖块(任意)预制体然后在上方找到Tag选项

  • 单击打开后点击Add Tag,点击+号,增加两个如下Tag

  • 由于我们的圆环是动态创建的所以我们需要在脚本中添加更改Tag的代码,首先我们先Disc脚本找到对应的函数并添加第23行代码如下所示:

private void CreateArch(int radius, int deg, int rot)
{
// 创建圆环
ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,
deg, radius, 0.5f, 1, 20, true, true, true, true, true);
pbMesh.GetComponent<MeshRenderer>().material = mat; // 设置圆环的Tag
pbMesh.gameObject.tag = "Arch"; // 给圆环添加碰撞器
pbMesh.gameObject.AddComponent<MeshCollider>(); // 使圆环平躺
pbMesh.transform.Rotate(-90, 0, 0); // 设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)
Transform xRig = new GameObject("xRig").transform;
pbMesh.transform.SetParent(xRig, false); // 设置圆环初始在圆盘的旋转角度
xRig.Rotate(0, rot, 0);
Transform yRig = new GameObject("yRig").transform;
xRig.SetParent(yRig, false); yRig.SetParent(this.transform, false);
}
}
  • 然后保存并关闭我们的脚本即可。
  • 由于我们的砖块是有预制体的,所以我们只需打开砖块的预制体然后把Tag改为Brick即可。

子弹脚本的编写

  • 我们先新建一个脚本重命名为Porjectile并打开编写如下代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine; // 子弹脚本
public class Projectile : MonoBehaviour
{
private void Start()
{
} // 把子弹跟其他物体碰撞的脚本写在这里
private void OnCollisionEnter(Collision collision)
{
// 子弹跟谁发生了碰撞?
if (collision.gameObject.tag == "Arch")
{
print("你碰到了圆环!");
}
else if (collision.gameObject.tag == "Brick")
{
print("你碰到了砖块!");
}
}
}
  • 并把脚本拖给子弹即可,由于子弹有可能会碰到平台,我们可以选中平台把平台的Mesh Colider组件给移除掉。注意,子弹上得添加Rigidbody和Sphere Colider组件,否则子弹不会产生碰撞效果。

子弹碰到圆环后反弹

  • 首先我们需要联系优梦创客的助教Alice老师她为我们提供完成本节课任务所需要的插件,然后把插件导入至我们的Unity,并打开我们的Projectile预制体并添加Lober脚本,并把左上角的√给取消掉,如下所示



    然后重新打开我们的Projectile脚本并把代码修改为如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine; // 子弹脚本
public class Projectile : MonoBehaviour
{
private Lober lober;
private Transform ply; private void Start()
{
lober = GetComponent<Lober>(); ply = GameObject.FindWithTag("Player").transform;
} // 把子弹跟其他物体碰撞的脚本写在这里
private void OnCollisionEnter(Collision collision)
{
// 子弹跟谁发生了碰撞?
if (collision.gameObject.tag == "Arch")
{
print("你碰到了圆环!"); lober.endPos = ply.position; lober.enabled = true;
}
else if (collision.gameObject.tag == "Brick")
{
print("你碰到了砖块!");
}
}
}

Fire Balls 05——子弹的命中及后续效果的更多相关文章

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

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

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

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

  3. Fire Balls 09——修正游戏的BUG

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

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

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

  5. Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向

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

  6. Fire Balls 04——砖塔的创建,动态上升以及旋转

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

  7. Fire Balls 07——砖块的淡出,消失以及砖塔的下落

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

  8. Fire Balls 10——UI界面的制作

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

  9. Fire Balls 11——平台组合,场景的美化

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

随机推荐

  1. 整理github总结

    之前记述过两篇关于git命令的随笔,那时候对git的理解还不太深(虽然现在理解的也不是很多...菜哭了),只会用那些命令,并没有形成自己的知识,今天下载完Git之后,规整了一下自己的github,在吃 ...

  2. 入门MySQL——基础语句篇

    前言:  前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及 ...

  3. Spring aop 拦截自定义注解+分组验证参数

    import com.hsq.common.enums.ResponseState;import com.hsq.common.response.ResponseVO;import org.aspec ...

  4. 【POJ - 3280】Cheapest Palindrome(区间dp)

    Cheapest Palindrome 直接翻译了 Descriptions 给定一个字符串S,字符串S的长度为M(M≤2000),字符串S所含有的字符的种类的数量为N(N≤26),然后给定这N种字符 ...

  5. Romantic HDU - 2669(扩欧)

    #include<bits/stdc++.h> using namespace std; typedef long long LL; void gcd(LL a, LL b, LL &am ...

  6. SpringBoot第二十三篇:安全性之Spring Security

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11350255.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   系统的安全 ...

  7. 压力测试-jmeter

    1. 场景描述 新申请的服务器,要压测下python算法程序最多能执行多少条数据,有几年没用压力测试工具-jmeter了,重新下载了最新版本,记录下,也希望能帮到准备使用jmeter做压测的朋友. 2 ...

  8. Python3基本数据类型之列表

    1.初识列表 列表(List)是Python3中的"容器型"数据类型. 列表通过中括号把一堆数据括起来的方式形成,列表的长度不限. 列表里面的元素可以是不同的数据类型,但是一般是相 ...

  9. Java学习|HTTP请求头

    https://www.cnblogs.com/honghong87/articles/6941436.html 常见http请求报文头属性      Accept:告诉服务端,客户端接受什么类型的响 ...

  10. spring boot 打 war包

    spring boot .spring cloud打 war包,并发布到tomcat中运行 1.pom文件修改 <packaging>war</packaging> 2.< ...