2012-11-13 114 views
8

Tôi đang cố gắng để hiển thị một mảng hai chiều trong trình soạn thảo như "Layer Collision Matrix" được thể hiện trong Unity: enter image description hereUnity Tuỳ chỉnh biên tập Giống như 'Lớp Collision Matrix'

Mặc dù thay vì hộp kiểm Tôi cần ints, và một lưới đầy đủ (không phải là hình dạng tam giác.) Tôi không thể có vẻ để tìm ra cách để làm điều này mặc dù ... Tôi có thể nhận được một trình soạn thảo tùy chỉnh, mặc dù làm cho lưới thất bại. Vì vậy, có cách nào tôi có thể nhìn thấy mã của trình soạn thảo của nhà quản lý vật lý (lớp Collision Matrix là ở đó) hoặc có thể ai đó biết một cách tốt để làm điều này?

Lưu ý: Ngôn ngữ ưa thích là C#, mặc dù mọi thứ sẽ thực hiện.

Cảm ơn.

Trả lời

6

Mã liên quan đến những gì bạn đang tìm kiếm khá phức tạp, vì vậy tôi sẽ dựa vào bạn để biết tôi đang nói gì ở đây. The Unity docs are your friend.

  1. Tạo GUIArea nơi công cụ biên tập đặc biệt của bạn sẽ là. Bên trong nó, đặt một cuộc gọi hàm sau đó sẽ gọi các hàm render khác. Tôi nghi ngờ bạn sẽ muốn thực hiện một số đóng gói tại đây. Việc đóng gói gui trong một chức năng khác sẽ cho phép bạn sao chép chức năng của nó (trong giới hạn trừu tượng của bạn) và di chuyển mọi thứ xung quanh trên màn hình dễ dàng hơn.

  2. Thiết kế ba điểm neo (Vector2). Chúng phải đại diện cho điều phối viên trên cùng bên trái của nhãn hàng, nhãn cột và trường dữ liệu của bạn. Lưu ý rằng các cột neo cần phải ở ngay trên cùng (cùng giá trị x) với neo hàng , vì xoay (bước tiếp theo) sẽ biến đổi neo.

  3. Sử dụng GUIUtility.RotateAroundPivot() để xoay chuyển đổi GUI ma trận 90 ° quanh điểm neo cột.

  4. Viết dài GUI.Label (hoặc một vài trong số đó) cho nhãn của bạn. Neo chúng vào cột neo. Trên hình ảnh ở trên, nhãn của bạn chuỗi có thể đọc một cái gì đó như "Mặc định \ nTransparentFX \ nIgnoreRaycast \ nWater" trong đó \ n tạo một dòng mới.

  5. Xoay lại, -90 ° trở lại ma trận gốc. Ngoài ra, bạn có thể sao chép GUI.matrix trước bước 3, sau đó gán lại cho đặt lại ma trận được đảm bảo. Xoay qua lại có thể có một số lỗi do dấu phẩy động và sự không chính xác khác.

  6. Viết nhãn cho các hàng. Cùng một phương pháp như hai bước trở lại. Neo chúng tại hàng neo.

  7. Đây là phần khó khăn hơn. Lặp lại thông qua trường dữ liệu của bạn, tạo một nhỏ EditorGUI.IntField() hoặc StringField() hoặc thậm chí ObjectField() cho từng phần tử trong dữ liệu của bạn. Mỗi phần tử sẽ cần neo riêng của nó, sau đó được tổng hợp bằng neo trường dữ liệu. Nếu trường dữ liệu của bạn là một mảng 2D vuông, việc tạo các neo sẽ dễ dàng - mặc dù bạn cũng sẽ có các phần tử trống trong mảng của mình (nếu bạn muốn có chức năng chính xác được mô tả ở trên).Nếu bạn muốn tiết kiệm bộ nhớ, bạn sẽ phải chuyển đổi các chỉ mục thành phần thành các tọa độ sử dụng một số phép toán khó. Tôi không chắc chắn đầu của tôi đầu như thế nào tôi muốn làm điều đó.

Hy vọng tôi sẽ không quên gì cả. Giao diện của Unity là một b ----. Nhận xét và tôi sẽ cố hết sức để giúp bạn.

+1

Cảm ơn, có vẻ tốt. Tôi không biết về điều RotateAroundPivot (và rõ ràng đã không tìm kiếm đủ kỹ lưỡng để tìm nó.) Phần còn lại có vẻ tương đối đơn giản (mặc dù, như bạn đã nói, GUI có thể hơi khó chịu một lần.) Cảm ơn! Khi tôi làm cho nó tôi sẽ đăng mã của tôi, mặc dù không có thời gian atm, vì vậy có thể là một thời gian. –

+0

Vui vì nó vẫn có liên quan. Tôi nhận thấy rằng câu hỏi là hai tháng tuổi: P – cjcurrie

+1

Yea, hiện tại tôi đã giải quyết nó theo một cách thân thiện với người dùng ít hơn, nhưng nó đã được ok vì nó chỉ là tôi, những người đã sử dụng nó. –