关于Unity 中OnTriggerStay2D方法不触发的问题

本文讲述了作者在Unity项目中遇到的物品拾取功能不稳定的问题。通过在主角和箱子的碰撞器交互时使用OnTriggerEnter2D和OnTriggerExit2D,配合Update方法和一个布尔开关,解决了当主角静止时OnTriggerStay2D方法失效的问题,实现了稳定触发物品拾取和数量更新。作者是一名大一新生,正在学习Unity引擎,此经验分享对于初学者具有参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近自己在和同学合作做一个小项目,其中本人负责的功能之一就是控制主角拾取东西,并将物品数量变化显示在背包里,由于没有做过这个功能。就先在自己之前做的一些练习品里面练手。

我的思路就是,关于要拾取的物品(我实验用的番茄),我在主角Ruby(素材是unity商店里的ruby's advantage)控制代码中定义一个整型变量,然后再写一个方法来控制这个番茄数量的变化。东西是在一个箱子上面拿的,就在箱子上设置了一个碰撞器,然后在箱子上面写这个OnTriggerStay2D函数,当ruby移动到箱子上时,在这个里面拿到主角的类,然后调用主角身上写好的控制番茄数量变化的方法,从而实现数量的改变。

一开始的代码是这样的。

但是在实际应用中很快就出现了问题,就是要触发这个函数调用是一件很不稳定的事情

本来设置的是按住T键,这个番茄左下角的数量就会变化,可实际上 这个变化并不灵敏,经过我多次实验,只有ruby在碰撞器里移动的同时快速按住T键,这个值才会变化。

显然这是不符合要求的。

我在C站中寻求这类问题的文章,找了各种方法都没有解决我的问题

于是我在请教了社团学长之后,给了我一个很好的解决方法。

首先定义一个布尔类型的值,作为这个改变西红柿数量方法的开关。

 

 随后利用OnTriggerEnter2D和OnTriggerExit2D这两个方法,来控制这个布尔值的正负。

 

 最后,将原本打算写在OnTriggerStay2D里面的代码移植到Update方法中,同时将上面设置的这个布尔值作为开关即可。

这样,当主角ruby位于碰撞器中的时候,按住设置好的T键,这个方法就可以稳定调用,数量可以稳定改变了!

关于之前调用老是失灵的问题,学长给我的解答是当主角的碰撞器静止不动的时候,会处于一个休眠的状态,所以其中的OnTriggerStay2D方法会存在失灵的情况,这也是为什么之前当我控制主角高速移动的时候这个方法还是会概率触发。

本人是一名大一新生,在学校社团学长们的指导下开始unity引擎的学习,对于其中的许多知识理解的十分粗浅,对于上面这个问题,可能有大佬有更好的解决方法,欢迎指导。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值