Saya sudah menulis prototipe dari sesuatu seperti ini. Saya membuat beberapa sumber yang terlihat seperti ini:
Jadi pada dasarnya objek "ShipPart" ini memiliki titik jepretan yang telah ditentukan sebelumnya. Keempat collider ini akan membantu menentukan apakah Anda mencoba untuk mengunci suatu objek atau tidak.
Selanjutnya saya membuat kelas ShipPart, yang berisi beberapa hal seperti:
//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 ;
Ini juga berisi fungsi dan properti untuk membantu dengan drag and drop, dan memeriksa keadaan ShipParts yang berdekatan.
Fungsi penting adalah fungsi Lampirkan (), yang akan menghubungkan ShipPart ini ke Kapal Anda.
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);
}
Kemudian akhirnya, kelas Kapal, melacak bagian Inti Anda, semua bagian yang terlampir, semua data kapal dikelola di sini. Anda dapat raycast untuk bagian-bagian kapal di kelas ini. Periksa bagian yang sedang Anda seret untuk melihat apakah ada collider yang bertabrakan dengan bagian lain.
Jika ada tabrakan, periksa apakah rotasi berada dalam ambang yang Anda tentukan dan pasang ke tempatnya.
Ini sebenarnya jauh lebih rumit untuk dijelaskan daripada yang saya kira. Beri tahu saya jika Anda memiliki pertanyaan dan saya akan menguraikan apa pun yang Anda perlu bantuan lebih lanjut.