2017-08-12 278 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),也調整邊界框。這將防止物體卡在邊緣,因爲邊界框邊緣現在變圓了。