2016-04-28 3 views
0

私は調整可能なロープを統一して作ろうとしており、基本的には配列修飾子を作っていました。ヒンジBody.Connected Bodyを前回インスタンス化されたオブジェクトに設定する方法最後のインデックスを使用するリジッドボディ?

私は最後のインデックスを使用して最後のインスタンス化されたオブジェクトを取得できますが、現在のオブジェクトのヒンジジョイントを取得し、以前のオブジェクトの剛体を現在のオブジェクトに接続したボディに追加するにはどうすればよいですか?

public class Rope : MonoBehaviour { 

    public GameObject Segment1; 
    int segmentName = 1; 

    public int ropeLength; // length of rope 
    GameObject[] segmentArray; // stores gameobjects in array 

    Rigidbody[] segmentRb; // stores rigidbodys 
    HingeJoint[] segmentHj; // stores Hingjoints 

    Vector3 newSegmentLoc; 

    void Start() { 

     segmentArray = new GameObject[ropeLength]; 
     SpawnSegment(); 
    } 

    void Update() { 

    } 

    void SpawnSegment(){ 

      void SpawnSegment(){ 

     for (int i = 1; i < ropeLength; i++) { 

      segmentArray [i] = Instantiate (Segment1, newSegmentLoc, Quaternion.identity) as GameObject; // spawn in clones 
      segmentArray [i].transform.parent = this.transform; // set parent of clones 
      segmentArray [i].transform.name = segmentName.ToString(); // change the name of clones 
      segmentName++; 

      //int currentIndex = Array.IndexOf (segmentArray, segmentArray [i]); 

      float yLoc = segmentArray [i].transform.position.y; 
      newSegmentLoc = new Vector3 (0, yLoc - 1, 0); 

      //int lastIndex = Array.LastIndexOf (segmentArray, segmentArray [i]); 

      Rigidbody rb = segmentArray [i].gameObject.GetComponent<Rigidbody>(); 
      HingeJoint hj = segmentArray [i - 1].gameObject.GetComponent<Rigidbody>().GetComponent<HingeJoint>(); 

      hj.connectedBody = rb; 
     } 

     Destroy (Segment1); 

    } 

} 

答えて

0

forループでは、現在のインデックスはiですが、計算する必要はありません。 前の要素が必要な場合は、segmentArray[i - 1]と言うだけで、次のようにしたい場合はsegmentArray[i + 1]

ですが、初期化されていない可能性があります。 youdが現在segmentArray [i + 1]を取得しようとすると、nullを返します。

だから、ループの外側の0番目の要素を初期化することもできます。これにより、ループをi = 1で開始することができ、電流を次の電流に接続するのではなく、前の電流を電流に接続します。

関連する問題