Rigidbody2D 穿墙
Rigidbody2D goes through walls
我想为玩家添加捡起箱子并四处移动的能力,但是当玩家捡起箱子并碰到墙时,它开始抽动并穿过它。
请告诉我如何解决这个问题。我走投无路了。
这是一个显示我的问题的视频:https://youtu.be/TGt73ASBYpQ
一些代码:
//The point at which an box is attracted
attractedTo = player.transform.position + (player.lookDirection * player.itemHoldDistance);
//Attraction
transform.position += attractedTo - transform.position;
P.S。抱歉我的英语不好
您正在修改保持对象的位置,请改用 AddForce 等刚体函数。
事实上,transform.position
创建了一个绝对组件,更改它会创建 point-to-point 位移。 transform 从不考虑物理和碰撞器。使用rigidbody
解决问题。
private Rigidbody2D rigidbody;
public void Start() => rigidbody = GetComponent<Rigidbody2D>();
rigidbody.MovePosition(attractedTo);
如果问题依旧,必须创造条件不上墙
public LayerMask wallLayer; // define layer field
if (boxCollider.IsTouchingLayers(wallLayer.value)) return; // =
我想为玩家添加捡起箱子并四处移动的能力,但是当玩家捡起箱子并碰到墙时,它开始抽动并穿过它。
请告诉我如何解决这个问题。我走投无路了。
这是一个显示我的问题的视频:https://youtu.be/TGt73ASBYpQ
一些代码:
//The point at which an box is attracted
attractedTo = player.transform.position + (player.lookDirection * player.itemHoldDistance);
//Attraction
transform.position += attractedTo - transform.position;
P.S。抱歉我的英语不好
您正在修改保持对象的位置,请改用 AddForce 等刚体函数。
事实上,transform.position
创建了一个绝对组件,更改它会创建 point-to-point 位移。 transform 从不考虑物理和碰撞器。使用rigidbody
解决问题。
private Rigidbody2D rigidbody;
public void Start() => rigidbody = GetComponent<Rigidbody2D>();
rigidbody.MovePosition(attractedTo);
如果问题依旧,必须创造条件不上墙
public LayerMask wallLayer; // define layer field
if (boxCollider.IsTouchingLayers(wallLayer.value)) return; // =