箱子碰撞2D在Unity中重叠
问题描述:
我有两个箱子碰撞的GameObjects。一个是玩家,以固定的速度向另一个移动。碰撞停止播放器(便便字符; d)箱子碰撞2D在Unity中重叠
我不知道为什么会这样。碰撞顶部或底部的作品很好......从左侧发生同样的效果。绿色块只有一个对撞机,没有RigidBody。
另一个GIF,与MovePosition()...碰撞fromt*作品,但 “重新进入” 停止字符。为什么?!
- GIF,上下移动是好的,左,右的块顶部减慢他下来。奇怪的...
运动脚本:
public class PlayerController : MonoBehaviour
{
public float Speed = 10f;
private Rigidbody2D rb2D;
private Vector2 DirectionLeft;
private Vector2 DirectionRight;
private Vector2 DirectionUp;
private Vector2 DirectionDown;
private Vector2 CurrentDirection;
// Use this for initialization
void Start()
{
rb2D = GetComponent<Rigidbody2D>();
DirectionLeft = new Vector2(Speed*-1, 0);
DirectionRight = new Vector2(Speed, 0);
DirectionUp = new Vector2(0, Speed * -1);
DirectionDown = new Vector2(0, Speed);
CurrentDirection = DirectionLeft;
}
void SetAnimationDirection()
{
Vector3 scale = transform.localScale;
if (CurrentDirection == DirectionLeft)
scale.x = 1;
else
scale.x = -1;
transform.localScale = scale;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
if (moveHorizontal > 0)
CurrentDirection = DirectionRight;
if (moveHorizontal < 0)
CurrentDirection = DirectionLeft;
if (moveVertical < 0)
CurrentDirection = DirectionUp;
if (moveVertical > 0)
CurrentDirection = DirectionDown;
Debug.Log(CurrentDirection);
SetAnimationDirection();
rb2D.velocity = CurrentDirection;
}
答
解决的第一个问题(重叠):
我用transform.localScale = scale
来改变每FixedUpdate()
子画面的方向和也忘了更新比例因子,因为我添加了一个新的扩展,它将我的对象再调整一个Unity单位。
另一个问题(卡住在边缘)解决加入撞机2D的刃口半径设置的东西下面1.0f
(例如0.09f
),也调整边界框。这将防止物体卡在边缘,因为边界框边缘现在变圆了。
嗨,问题是因为你正在修改'SetAnimationDirection'函数中'transform.localScale'。这是每帧或物理帧完成的。只执行'transform.localScale = scale'会很好。当你改变移动方向而不是每次都在做.....你不这么认为吗? – Programmer
嗨,感谢您检查:)现在它正在工作:D但是当在第三个GIF中移动时,角色仍然卡住。你知道为什么会发生这种情况吗?! (我的意思是在顶部碰撞,向右移动,然后向左移动=>卡在边缘)。但非常感谢你! :D – DoubleVoid
我会添加一个新问题。这似乎是一个普通的2D物理问题......只是用一个最小的Unity 2D项目重现它...... – DoubleVoid