回答:
私はこのようなもののプロトタイプを書きました。次のようなリソースをいくつか作成しました。
したがって、基本的に、この「ShipPart」オブジェクトには事前定義されたスナップポイントがあります。これらの4つのコライダーは、オブジェクトを所定の位置にスナップしようとしているのかどうかを判断するのに役立ちます。
次に、次のようなものが含まれるShipPartクラスを作成しました。
//Neighbor information
ShipPart Left, Right, Top, Bottom;
//current rotation
float Rotation;
//The ship core it is attached to
Ship Ship;
//The coordinates in references to the ship core
int X ;
int Y ;
また、ドラッグアンドドロップ、および隣接するShipPartの状態のチェックに役立つ関数とプロパティも含まれています。
重要な関数はAttach()関数で、このShipPartを自分の船に接続します。
public void Attach(Ship ship, int x, int y)
{
GetComponent<Rigidbody2D> ().isKinematic = true;
Ship = ship;
X = x;
Y = y;
transform.parent = Ship.transform;
transform.position = Vector2.zero;
transform.localPosition = new Vector2(x, -y);
}
そして最後に、Shipクラスは、コアピース、アタッチされたすべてのパーツを追跡し、すべてのShipsデータがここで管理されます。このクラスの船の部品をレイキャストできます。現在ドラッグしているパーツをチェックして、コライダーのいずれかが他のパーツと衝突していないか確認します。
衝突がある場合は、回転が指定したしきい値内にあるかどうかを確認し、所定の位置にスナップします。
これは実際、私が思っていたよりも説明がはるかに複雑です。ご不明な点がありましたらお知らせください。さらにサポートが必要な場合は詳しく説明します。