Unity碰撞检测(3D和2D)

Unity碰撞检测3D和2D

  • 前言
  • 准备材料
    • 3D
    • 2D
  • 代码
    • 3D
      • 使用OnCollisionEnter()进行碰撞
        • Collider状态
        • 代码
      • 使用OnTriggerEnter()进行碰撞
        • Collider状态
        • 代码
    • 2D
      • 使用OnCollisionEnter2D()进行碰撞
        • Collider2D状态
        • 代码
      • 使用OnTriggerEnter2D()进行碰撞
        • Collider2D状态
        • 代码
    • 区别
      • 3D
        • 代码
          • OnCollisionEnter()
          • OnTriggerEnter()
        • 碰撞显示效果
          • OnCollisionEnter()
          • OnTriggerEnter()
      • 2D
        • 代码
          • OnCollisionEnter2D()
          • OnTriggerEnter2D()
        • 碰撞显示效果
          • OnCollisionEnter2D()
          • OnTriggerEnter2D()
  • 提示
  • 结语

前言

碰撞检测可以说时学习Unity中最重要的一个部分,以为在游戏中,想要游戏进行交互,碰撞时非常重要的,而我在网上查了很多教程,但是都没有成功,后来经过我的仔细检查代码与修改,终于成功了

准备材料

3D

简单Unity跑酷游戏
简单跑酷游戏
zhong_dotPlayer两个实体都加上碰撞体组件
比如:Box Collider
Player加上刚体组件
比如:Rigidbody
把刚体组件里面的Collision Detection模式改为Cintinuous

2D

在这里插入图片描述

zhong_dotPlayer两个实体都加上碰撞体组件
比如:Box Collider 2D
Player加上刚体组件
比如:Rigidbody 2D
把刚体组件里面的Collision Detection模式改为Cintinuous

代码

这一个我们将代码写在Player_move.cs里面

3D

使用OnCollisionEnter()进行碰撞

Collider状态

在这里插入图片描述

代码

void OnCollisionEnter(Collision collision){if (collision.gameObject.name == "zhong_dot"){Debug.Log("开始碰撞");}
}

此时我们可以看到,在碰撞函数里面的参数类型是Collision
并且指定的碰撞检测方式,if里面写的表达式是

参数名.gameObject.name ==  "碰撞目标的名称"

使用OnTriggerEnter()进行碰撞

Collider状态

在这里插入图片描述
从上图中可以看出是Is Trigger是出于勾选的状态,并且只需要其中一个勾选Is Trigger状态即可

代码

void OnTriggerEnter(Collider collision){if (collision.GetComponent<Collider>().name == "zhong_dot"){Debug.Log("开始碰撞")}
}

此时我们可以看到,在碰撞函数里面的参数类型是Collider
并且指定的碰撞检测方式,if里面写的表达式是

参数名.GetComponent<Collider>().name == "碰撞目标的名称"

2D

使用OnCollisionEnter2D()进行碰撞

Collider2D状态

在这里插入图片描述

代码

void OnCollisionEnter2D(Collision2D collision){if (collision.gameObject.name == "zhong_dot"){Debug.Log("开始碰撞");}
}

此时我们可以看到,在碰撞函数里面的参数类型是Collision2D
并且指定的碰撞检测方式,if里面写的表达式是

参数名.gameObject.name ==  "碰撞目标的名称"

使用OnTriggerEnter2D()进行碰撞

Collider2D状态

在这里插入图片描述

从上图中可以看出是Is Trigger是出于勾选的状态,并且只需要其中一个勾选Is Trigger状态即可

代码

void OnTriggerEnter2D(Collider2D collision){if (collision.GetComponent<Collider2D>().name == "zhong_dot"){Debug.Log("开始碰撞")}
}

此时我们可以看到,在碰撞函数里面的参数类型是Collider2D
并且指定的碰撞检测方式,if里面写的表达式是

参数名.GetComponent<Collider2D>().name == "碰撞目标的名称"

区别

3D

代码

OnCollisionEnter()

此时我们可以看到,在碰撞函数里面的参数类型是Collision
并且指定的碰撞检测方式,if里面写的表达式是

参数名.gameObject.name == "碰撞目标的名称"
OnTriggerEnter()

此时我们可以看到,在碰撞函数里面的参数类型是Collider
并且指定的碰撞检测方式,if里面写的表达式是

参数名.GetComponent<Collider>().name == "碰撞目标的名称"

碰撞显示效果

OnCollisionEnter()

就会有碰撞之后被弹开的结果

OnTriggerEnter()

就不会有碰撞之后被弹开的结果

2D

代码

OnCollisionEnter2D()

此时我们可以看到,在碰撞函数里面的参数类型是Collision2D
并且指定的碰撞检测方式,if里面写的表达式是

参数名.gameObject.name == "碰撞目标的名称"
OnTriggerEnter2D()

此时我们可以看到,在碰撞函数里面的参数类型是Collider2D
并且指定的碰撞检测方式,if里面写的表达式是

参数名.GetComponent<Collider2D>().name == "碰撞目标的名称"

碰撞显示效果

OnCollisionEnter2D()

就会有碰撞之后被弹开的结果

OnTriggerEnter2D()

就不会有碰撞之后被弹开的结果

提示

我建议你们在写代码的时候,一定要仔细查看代码的大小写,否则程序会不知不觉不出现结果,就像我,写一个On结果写成了on,导致一直没有结果

结语

其实学习Unity没有那么难,只要你真心想学,就还是能学得会

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/91119.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:八种数据结构大全

数据结构 1.1 数据结构概述 数据结构是计算机存储、组织数据的方式&#xff1b;通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能&#xff1b;常用的数据结构有&#xff1a;数组&#xff08;Array&#xff…

Baklib是比语雀、Notion、石墨文档更好用的在线知识库管理工具

在当今信息爆炸的时代&#xff0c;如何高效地管理和利用知识成为了每个人都面临的问题。在线知识库管理工具应运而生&#xff0c;帮助用户整理、存储和共享知识。在这篇文章中&#xff0c;我将介绍一个更好用的在线知识库管理工具——Baklib&#xff0c;并探讨它相对于其他知识…

解决Android Studio中Plugin version和Gradle version不匹配的问题

生命中最艰难的那段路是要自己一个人走过来的&#xff0c;这样&#xff0c;学到更多的是坚强&#xff0c;而不是感动。 《红猪》 前言 导入一个百度云的Demo而已&#xff0c;居然遇到这么多问题&#xff0c;纠结了很久&#xff0c;也查了很多资料&#xff0c;弯弯绕绕了好多路…

小米手机便签怎么导出到华为mate60Pro手机上?

华为mate60Pro手机于2023年8月29日发布了先锋计划&#xff0c;有不少网友都抢到了这款新机。而有一些网友表示自己在换手机之前遇到了问题&#xff0c;这就是之前使用的手机是小米&#xff0c;所以需要把重要的图片、短信、通讯录、便签等数据导出到新的手机上&#xff0c;但是…

ubuntu20.04 编译安装运行emqx

文章目录 安装依赖编译运行登录dashboard压力测试 安装依赖 Erlang/OTP OTP 24 或 25 版本 apt-get install libncurses5-dev sudo apt-get install erlang如果安装的erlang版本小于24的话&#xff0c;可以使用如下方法自行编译erlang 1.源码获取 wget https://github.com/erla…

springBoot--终

目录 Web定制SpringMVC定制某些mvc配置定制mvc核心组件完全自定义mvc 静态资源静态资源映射静态资源缓存示例自定义静态资源规则配置方式代码方式 欢迎页Favicon&#xff08;网站图标&#xff09;路径匹配策略内容协商制定返回json类型数据制定返回xml类型数据制定返回自定义类…

Matlab 使用经验分享(常用函数介绍;矩阵常见计算)

Matlab 使用经验分享 大家好&#xff01;最近有很多朋友询问我关于 Matlab 的使用&#xff0c;于是我决定写一篇博客来分享一下我的经验。对于数学和编程爱好者来说&#xff0c;Matlab 是一个非常有用的工具。我自己在数学实验和数学建模竞赛中也经常使用它。那么&#xff0c;…

CotEditor for mac 4.0.1 中文版(开源文本编辑器)

coteditorformac是一款简单实用的基于Cocoa的macOS纯文本编辑器&#xff0c;coteditormac版本可以用来编辑网页、结构化文本、程序源代码等文本文件&#xff0c;使用起来非常方便。 CotEditor for Mac具有正则表达式搜索和替换、语法高亮、编码等实用功能&#xff0c;而CotEdi…

信息化发展12

数字民生 数字民生建设重点通常强调&#xff1a; 1 &#xff09; 普惠&#xff1a; 充分开发利用信息技术体系&#xff0c; 扩大民生保障覆盖范围&#xff0c; 助力普惠型民生建设&#xff0c; 解决民生资源配置不均衡等问题。 2&#xff09; 赋能&#xff1a; 信息技术体系与…

FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置

FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置 0、 界面预览1、 查看IP地址2、 修改协议配置3、 开放阿里云安全组4、 设置ACL5、 设置协议中ACL&#xff0c;让PBX匹配内外网6、 重新加载SIP模块7、 查看状态8、 测试一下 0、 界面预览 http://myfs.f3322.net:8020/ 用…

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08;DataSet API&a…

uniapp返回上一页并刷新

在uniapp中&#xff0c;经常会有返回上一页的情况&#xff0c;官方提供有 uni.navigateBack 这个api来实现效果&#xff0c;但是此方法返回到上一页之后页面并不会更新&#xff08;刷新&#xff09;。 例如有这样一个场景&#xff1a;从地址列表页点击添加按钮进入添加地址页面…