unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别

2023-12-24 18:15

本文主要是介绍unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity中的OnCollisionEnterOnTriggerEnter两个函数在日常的开发中很常见但也容易混淆,下面说一说两者的区别。

请添加图片描述

碰撞器(Collider)与触发器(Trigger)的概念

碰撞器(Collider)和触发器(Trigger)都是Unity中用于检测物体之间交互的组件。它们的主要区别在于对物体之间交互的处理方式。

  • 碰撞器(Collider) 用于检测两个物体之间的碰撞。当两个物体进入彼此的碰撞边界时,它们会发生碰撞,此时会触发OnCollisionEnter函数。
  • 触发器(Trigger) 用于检测一个物体是否进入另一个物体的触发边界。当一个物体进入另一个物体的触发边界时,会触发OnTriggerEnter函数。

OnCollisionEnter与OnTriggerEnter的区别

  • 触发条件不同:OnCollisionEnter是在两个物体发生碰撞时触发,而OnTriggerEnter是在一个物体进入另一个物体的触发边界时触发。
    另外OnTriggerEnter需要在刚体中勾选Is Trigger选项。OnCollision则不需要。
    在这里插入图片描述

  • 处理方式不同:OnCollisionEnter通常用于实现物体的物理交互,如碰撞、弹跳等。而OnTriggerEnter通常用于实现一些特殊触发事件,如进入某个区域时触发特定行为。
    在这里插入图片描述

  • 参与对象数量不同:OnCollisionEnter只能处理两个物体之间的碰撞,而OnTriggerEnter可以处理一个物体进入多个物体的触发边界的情况。

  • 函数参数不同:OnCollisionEnter的参数是一个Collision对象,包含了与碰撞相关的信息,如参与碰撞的物体、碰撞点等。而OnTriggerEnter的参数是一个GameObject对象,表示触发该事件的物体。
    OnTriggerEnter(GameObject other)
    OnCollisionEnter(Collider other)

应用示例

通常游戏开发中,我们会有一个玩家和一个敌人的角色,当玩家进入敌人的触发边界时,敌人会识别并发出攻击。此时,我们可以使用OnTriggerEnter来实现这个功能。

void OnTriggerEnter(GameObject other)  
{  if (other.tag == "Player") // 玩家的标签为"Player"  {  // 玩家进入敌人的触发边界,敌人发出攻击  //攻击代码...}  
}

总结

OnCollisionEnterOnTriggerEnter虽然都是用于检测物体之间交互的函数,但它们的应用场景和处理方式有所不同。在实际开发中,我们需要根据具体开发需求选择合适的函数来实现所需的功能。

除此这两个函数外,还有跟两者配套使用的函数:

在这里插入图片描述

在这里插入图片描述

请添加图片描述

这篇关于unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532673

相关文章

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否