多次调用 OnTriggerEnter2D 和 OnTriggerExit2D
OnTriggerEnter2D and OnTriggerExit2D called mutiples time
我有一个 RigidBody2D
的玩家和一个 BoxCollider2D
的柱子。
我检查何时调用 OnTriggerEnter2D
(玩家与柱子相撞),然后我尝试通过将他的 bodyType
更改为 Static
来保持玩家的位置。
调用OnTriggerExit2D
时,播放器bodyType
将再次恢复为Dynamic
。
我的问题是:将播放器 bodyType
更改为 Static
后,立即调用 OnTriggerExit2D
。恢复为 Dynamic
后,立即调用 OnTriggerEnter2D
。它一次又一次地重复。
这是我的球员和支柱
有什么建议请告诉我。
谢谢。
来自 RigidbodyType2D.Static
文档:
Static behaviour stops the Rigidbody2D from reacting to gravity or
applied forces including contacts with any other Rigidbody2D.
This type of Rigidbody2D should never repositioned explicitly. It is
designed to never move.
A static Rigidbody2D will only collide with a dynamic Rigidbody2D body
type. The exception to this is if Rigidbody2D.useFullKinematicContacts
is set to true in which case it will also collide with any
[[Kinematic]] body types.
When an attached Collider2D is set to trigger, it will always produce
a trigger for any Collider2D attached to [[Dynamic]] or [[Kinematic]]
body types.
这就是出口再次被触发的原因,如果你想让你的角色粘在墙上,你应该采取不同的方法。
我对这个问题的解决方案改为使用约束。
我采用的方法是在触发 OnCollisionEnter() 时冻结 X 和 Y 位置以及 Z 旋转。
void OnCollisionEnter2D(Collision2D collison){
if(collison.transform.tag -= "Player"){
body.constraints = RigidbodyConstraints2D.FreezePositionY | RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezeRotation;
}
}
void OnCollisionExit2D(Collision2D collision){
if(collision.transform.tag == "Player"){
body.constraints = RigidbodyConstraints2D.None;
}
}
我有一个 RigidBody2D
的玩家和一个 BoxCollider2D
的柱子。
我检查何时调用 OnTriggerEnter2D
(玩家与柱子相撞),然后我尝试通过将他的 bodyType
更改为 Static
来保持玩家的位置。
调用OnTriggerExit2D
时,播放器bodyType
将再次恢复为Dynamic
。
我的问题是:将播放器 bodyType
更改为 Static
后,立即调用 OnTriggerExit2D
。恢复为 Dynamic
后,立即调用 OnTriggerEnter2D
。它一次又一次地重复。
这是我的球员和支柱
有什么建议请告诉我。
谢谢。
来自 RigidbodyType2D.Static
文档:
Static behaviour stops the Rigidbody2D from reacting to gravity or applied forces including contacts with any other Rigidbody2D.
This type of Rigidbody2D should never repositioned explicitly. It is designed to never move.
A static Rigidbody2D will only collide with a dynamic Rigidbody2D body type. The exception to this is if Rigidbody2D.useFullKinematicContacts is set to true in which case it will also collide with any [[Kinematic]] body types.
When an attached Collider2D is set to trigger, it will always produce a trigger for any Collider2D attached to [[Dynamic]] or [[Kinematic]] body types.
这就是出口再次被触发的原因,如果你想让你的角色粘在墙上,你应该采取不同的方法。
我对这个问题的解决方案改为使用约束。 我采用的方法是在触发 OnCollisionEnter() 时冻结 X 和 Y 位置以及 Z 旋转。
void OnCollisionEnter2D(Collision2D collison){
if(collison.transform.tag -= "Player"){
body.constraints = RigidbodyConstraints2D.FreezePositionY | RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezeRotation;
}
}
void OnCollisionExit2D(Collision2D collision){
if(collision.transform.tag == "Player"){
body.constraints = RigidbodyConstraints2D.None;
}
}