簡體   English   中英

Unity,2d,關節沒有通過腳本正確形成

[英]Unity, 2d, Joints not forming properly through script

當我運行一個場景時,腳本會檢查 object 的四個方向,如果范圍內還有另一個 object,它們應該相互形成關節。 它應該在四個方向上對每個適用的 object 執行此操作。 但是,當一個 object 在范圍內有多個 object 時,它只與其中一個連接。 它確實創建了正確數量的關節,但只有一個分配了它的目標游戲 object。

每個方向的腳本基本相同,在我的測試中它不僅在一個方向失敗,所以我在這里只發布了一個方向腳本。

雖然我確實想知道這是否與一般的統一行為有更多關系?

 [SerializeField]
 private Transform eastPosition;
 [SerializeField]
 private Transform westPosition;
 [SerializeField]
 private Transform northPosition;
 [SerializeField]
 private Transform southPosition;

 float baseCastDistance = 0.2f;


 private void Start()
 {
     CastEast();
     CastNorth();
     CastWest();
     CastSouth();

 }

 void CastEast()
 {
     float castDistance = baseCastDistance;
     Vector3 targetPosition = eastPosition.position;
     targetPosition.x += castDistance;
     Debug.DrawLine(eastPosition.position, targetPosition, Color.cyan, 1000f);

     RaycastHit2D hit = (Physics2D.Linecast(eastPosition.position, targetPosition, 1 << LayerMask.NameToLayer("Blocks")));
     if (hit)
     {
             print("Item in the way: " + hit.rigidbody.gameObject.name);
         gameObject.AddComponent<FixedJoint2D>();
         gameObject.GetComponent<FixedJoint2D>().connectedBody = hit.rigidbody;
     }
 }

設法自己解決它,在創建關節時我同時存儲它們,並使用它:

void CastEast()
    {
        float castDistance = baseCastDistance;
        Vector3 targetPosition = eastPosition.position;
        targetPosition.x += castDistance;
        Debug.DrawLine(eastPosition.position, targetPosition, Color.cyan, 1000f);

        RaycastHit2D hit = (Physics2D.Linecast(eastPosition.position, targetPosition, 1 << LayerMask.NameToLayer("Blocks")));
        if (hit)
        {
                print("Item in the way: " + hit.rigidbody.gameObject.name);
           Joint2D eastJoint = gameObject.AddComponent<FixedJoint2D>();   
           eastJoint.connectedBody = hit.rigidbody;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM