2017-08-12 208 views
1

我有两个箱子碰撞的GameObjects。一个是玩家,以固定的速度向另一个移动。碰撞停止播放器(便便字符; d)箱子碰撞2D在Unity中重叠

但它们重叠,你可以在这里看到: enter image description here

我不知道为什么会这样。碰撞顶部或底部的作品很好......从左侧发生同样的效果。绿色块只有一个对撞机,没有RigidBody。

的Gif: enter image description here

另一个GIF,与MovePosition()...碰撞fromt顶级作品,但 “重新进入” 停止字符。为什么?! enter image description here

  • GIF,上下移动是好的,左,右的块顶部减慢他下来。奇怪的... enter image description here
  • 运动脚本:

    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; 
        } 
    
    +1

    嗨,问题是因为你正在修改'SetAnimationDirection'函数中'transform.localScale'。这是每帧或物理帧完成的。只执行'transform.localScale = scale'会很好。当你改变移动方向而不是每次都在做.....你不这么认为吗? – Programmer

    +0

    嗨,感谢您检查:)现在它正在工作:D但是当在第三个GIF中移动时,角色仍然卡住。你知道为什么会发生这种情况吗?! (我的意思是在顶部碰撞,向右移动,然后向左移动=>卡在边缘)。但非常感谢你! :D – DoubleVoid

    +0

    我会添加一个新问题。这似乎是一个普通的2D物理问题......只是用一个最小的Unity 2D项目重现它...... – DoubleVoid

    回答

    1

    解决的第一个问题(重叠):

    我用transform.localScale = scale来改变每FixedUpdate()子画面的方向和也忘了更新比例因子,因为我添加了一个新的扩展,它将我的对象再调整一个Unity单位。

    另一个问题(卡住在边缘)解决加入撞机2D的刃口半径设置的东西下面1.0f(例如0.09f),也调整边界框。这将防止物体卡在边缘,因为边界框边缘现在变圆了。