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

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

在这里插入图片描述

在这里插入图片描述

请添加图片描述

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Unity脚本引入nmodbus库,首先需要确保你已经下载并安装了nmodbus库。然后,按照以下步骤进行操作: 1. 打开Unity,创建一个新的C#脚本,可以称为"NmodbusClient",并将其附加到你希望使用nmodbus功能的游戏对象上。 2. 在"NmodbusClient"脚本,首先需要在顶部添加以下命名空间: using Modbus; using Modbus.Serial; 3. 在脚本的主体部分,声明一个ModbusMaster对象,如: private ModbusMaster modbusMaster; 4. 在脚本的Start()方法,初始化ModbusMaster对象。你需要提供与你的设备通信所需的参数,例如串口号、波特率和从站地址。例如: modbusMaster = ModbusSerialMaster.CreateRtu(serialPortName); modbusMaster.Transport.Retries = 3; modbusMaster.Transport.WaitToRetryMilliseconds = 500; modbusMaster.Transport.ReadTimeout = 500; 5. 在脚本的Update()方法,通过调用modbusMaster对象的功能来发送和接收Modbus请求和响应。例如,要读取寄存器的值,你可以使用以下代码: ushort[] registerValues = modbusMaster.ReadHoldingRegisters(slaveAddress, startAddress, numberOfRegisters); 6. 根据你的需求,可以根据nmodbus库的文档和示例代码来使用其他功能和方法。 总之,通过按照以上步骤,在Unity脚本引入nmodbus库并初始化ModbusMaster对象,你就可以开始使用nmodbus库的功能来实现与Modbus设备的通信了。务必确保在引用nmodbus库时,该库已正确安装并添加到Unity的项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松爱睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值