最近自己在和同学合作做一个小项目,其中本人负责的功能之一就是控制主角拾取东西,并将物品数量变化显示在背包里,由于没有做过这个功能。就先在自己之前做的一些练习品里面练手。
我的思路就是,关于要拾取的物品(我实验用的番茄),我在主角Ruby(素材是unity商店里的ruby's advantage)控制代码中定义一个整型变量,然后再写一个方法来控制这个番茄数量的变化。东西是在一个箱子上面拿的,就在箱子上设置了一个碰撞器,然后在箱子上面写这个OnTriggerStay2D函数,当ruby移动到箱子上时,在这个里面拿到主角的类,然后调用主角身上写好的控制番茄数量变化的方法,从而实现数量的改变。
一开始的代码是这样的。
但是在实际应用中很快就出现了问题,就是要触发这个函数调用是一件很不稳定的事情
本来设置的是按住T键,这个番茄左下角的数量就会变化,可实际上 这个变化并不灵敏,经过我多次实验,只有ruby在碰撞器里移动的同时快速按住T键,这个值才会变化。
显然这是不符合要求的。
我在C站中寻求这类问题的文章,找了各种方法都没有解决我的问题
于是我在请教了社团学长之后,给了我一个很好的解决方法。
首先定义一个布尔类型的值,作为这个改变西红柿数量方法的开关。
随后利用OnTriggerEnter2D和OnTriggerExit2D这两个方法,来控制这个布尔值的正负。
最后,将原本打算写在OnTriggerStay2D里面的代码移植到Update方法中,同时将上面设置的这个布尔值作为开关即可。
这样,当主角ruby位于碰撞器中的时候,按住设置好的T键,这个方法就可以稳定调用,数量可以稳定改变了!
关于之前调用老是失灵的问题,学长给我的解答是当主角的碰撞器静止不动的时候,会处于一个休眠的状态,所以其中的OnTriggerStay2D方法会存在失灵的情况,这也是为什么之前当我控制主角高速移动的时候这个方法还是会概率触发。
本人是一名大一新生,在学校社团学长们的指导下开始unity引擎的学习,对于其中的许多知识理解的十分粗浅,对于上面这个问题,可能有大佬有更好的解决方法,欢迎指导。