Tôi đã viết một nguyên mẫu của một cái gì đó như thế này. Tôi đã tạo một số tài nguyên trông như thế này:
Vì vậy, về cơ bản, đối tượng "ShipPart" này có các điểm chụp được xác định trước. Bốn máy va chạm này sẽ giúp xác định xem bạn có cố chụp một vật vào đúng vị trí hay không.
Tiếp theo tôi đã tạo một lớp ShipPart, có chứa một số thứ như:
//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 ;
Nó cũng chứa các chức năng và thuộc tính để giúp kéo và thả và kiểm tra trạng thái của ShipParts lân cận.
Một chức năng quan trọng là hàm Đính kèm () sẽ kết nối ShipPart này với Tàu của bạn.
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);
}
Cuối cùng, lớp Ship, theo dõi mảnh Core của bạn, tất cả các phần đính kèm, tất cả dữ liệu về tàu được quản lý ở đây. Bạn có thể raycast cho các bộ phận tàu trong lớp này. Kiểm tra phần mà bạn hiện đang kéo để xem liệu có bất kỳ trình va chạm nào đang va chạm với các phần khác không.
Nếu có xung đột, hãy kiểm tra xem vòng quay có nằm trong ngưỡng chỉ định của bạn không và sau đó chụp nó vào vị trí.
Điều này thực sự phức tạp hơn rất nhiều để giải thích hơn tôi nghĩ nó sẽ xảy ra. Hãy cho tôi biết nếu bạn có câu hỏi và tôi sẽ giải thích bất cứ điều gì bạn cần thêm trợ giúp.