Tôi sẽ tấn công câu hỏi của bạn không theo trật tự, một phần vì tôi đang thấy vấn đề với cách tôi nghĩ rằng việc bạn tấn công vấn đề.
[Hình khối] này chắc chắn sẽ dễ dàng khi tôi có thể chiếu tia vào chúng - nhưng tôi đã thử điều này và khiến nhiều hình khối làm chậm trò chơi rất nhiều!
Tôi không biết tại sao điều này sẽ chậm, trừ khi bạn liên tục tạo, thay đổi và phá hủy các hình khối này trong thời gian chạy, nhưng thậm chí sau đó 200 khối là trò chơi của trẻ em để thống nhất (khi bạn bắt đầu nói 10.000 đồng thời tương tác với nhau Đoàn kết có thể bắt đầu có vấn đề.
Bạn không cần phải có các "vật thể" trong thế giới của mình để chiếu tia giữa chúng. bạn chỉ cần có các đối tượng trong thế giới của mình (GameObjects trống)
Tôi cho rằng câu hỏi của tôi là - nó có đắt không cần thiết khi có một khối lượng được thiết lập như thế này, nhưng không được kết xuất? Hoặc chi phí để có một khối lượng va chạm hình khối chỉ đắt hơn một chút so với mô phỏng này trong mã? (nếu có ...)
200 khối (thậm chí 200 RigidBody) không nhiều trong Unity. về phần mô phỏng trong mã phụ thuộc vào những gì bạn thực sự cần các nút của bạn để biết.
Cũng như một câu hỏi phụ - tôi có thể kết xuất 200 viên và có một trò chơi mượt mà không? Tôi có thiếu một số tùy chọn instaging? Tôi đoán mọi thứ sẽ được tự động kích hoạt.
instaging in Unity dựa trên hệ thống prefab (về cơ bản tạo nên thứ của bạn sau đó tạo prefab, sau đó sử dụng lại và một lần nữa trong trò chơi / cảnh của bạn)
Đầu tiên tôi sẽ mô phỏng một hệ thống lưới bằng cách bắt các cú chạm / nhấp chuột và làm tròn tọa độ cho các số nguyên gần nhất. Đây là chi phí rất thấp và hoạt động tốt để đặt mọi thứ, tuy nhiên tôi là một người đam mê AI và tôi đã quyết định tạo ra một mạng lưới hữu hình hơn để các đặc vụ có thể chạy các tìm kiếm trên đó để tìm đường.
nếu bạn có thể che giấu toàn bộ cấp độ / cảnh trò chơi của mình trong một lưới cố định, về lý thuyết bạn có thể sử dụng tính năng truyền tải lưới tiêu chuẩn, nhưng tất cả việc giữ sách của bạn có thể sẽ cần phải được định giá cụ thể là trung tâm, và cuối cùng thì điều này sẽ không xảy ra rất sạch sẽ / hiệu quả
Đối với điều này, tôi sẽ cần một lưới các nút và để các nút đó có một chút thông tin được đính kèm. Nó sẽ là một ý tưởng tốt hơn nhiều để làm điều này hoàn toàn trong mã?
có, không, có lẽ nó phụ thuộc vào thông tin mà bạn thực sự cần các nút của mình để có (nút đơn giản nhất tôi có thể nghĩ cho trò chơi phòng thủ tháp là một điểm, một bool chiếm và một bool có thể truy cập được)
Hoặc tôi có thể thoát khỏi việc đặt các hình khối thực tế vào một lưới lớn trên bản đồ?
Tại sao bạn sẽ làm điều này? Tôi thấy không có giá trị gì ngoài việc có một cái gì đó mà bạn có thể thấy trong trình chỉnh sửa, và khi đến lúc chạy trò chơi, bạn sẽ không làm bất cứ điều gì với những khối này như hình khối, vậy tại sao bạn phải đặt chúng ở vị trí đầu tiên nếu bạn chỉ dùng tránh xa sự va chạm của họ, và kết xuất. Tất cả những gì bạn còn lại là một biến đổi mà bạn có thể có ngay lập tức bằng cách có các gameObject trống.
Cách dễ nhất để thực hiện các nút trong Unity là tạo các gameObject trống (chủ yếu cho vị trí), sau đó cung cấp cho chúng một tập lệnh cho tất cả các biến bạn cần , sau đó đặt tất cả các nút đó vào lớp riêng của chúng.
EDIT (Đáp lại yêu cầu để biết thêm chi tiết trong bình luận):
Không tạo ra một khối lập phương và lấy đi sự va chạm của nó và hiển thị giống như tạo một gameObject trống?
có và không. vâng, nó giống nhau về mặt vật lý và kết xuất, nhưng không về mặt giữ sách. mỗi fixedUpdate (đặc biệt là trong chế độ không phát hành), hệ thống sẽ lấy tất cả các thành phần mà một đối tượng có, tương tự cho các con của nó và đặt chúng để tính toán, và sau đó nếu bất kỳ thành phần nào không hoạt động sẽ ném nó đi. Vì vậy, nó vẫn cố gắng làm công cụ với các thành phần không hoạt động, nó chỉ là không nhiều. nếu bạn nhân số này đủ lần, nó có thể lên tới nửa giây trên mỗi khung hình, nhưng điều đó có thể ở trên đó.
Là các gameObject trống theo hình khối mặc định?
Không. Từ quan điểm ứng dụng, hãy nghĩ về một gameObject trống như một công cụ sửa đổi đang sửa đổi một cái gì đó hoặc không có gì. Tôi có thể tạo một gameObject trống, sau đó di chuyển nó xung quanh thế giới / cảnh, sau đó tôi có thể xoay nó và mở rộng nó, nhưng nếu nó không có con thì không có gì xảy ra, nhưng những thay đổi được ghi lại. sau đó nếu tôi lấy và tạo một hình cầu và biến nó thành con của trò chơi trống đó thì đứa trẻ đó sẽ thực hiện các sửa đổi đó và có các giá trị riêng được lưu trữ đối với cha mẹ của nó, nhưng thực chất là logic vật lý mà trò chơi trống rỗng đó là không có gì (không có kích thước, hình dạng hoặc bất cứ thứ gì), nhưng nó có một biến đổi và có thể nhận các thành phần.
Bởi vì nếu chúng không phải là lợi ích của một khối các hình khối sẽ là nền tảng của navMesh.
quyền của bạn đến một điểm. Khi tôi nói lưới từ, hầu hết mọi người nghĩ về việc vẽ các hộp và có tất cả các hộp đó có kích thước đồng đều, nhưng khi chúng ta đặt mọi thứ vào các hộp đó, tất cả chúng ta thực sự quan tâm là một điểm trong không gian (thường là trung tâm của 3D, nhưng đối với các họa tiết 2D trên cùng bên trái) vì vậy nếu chúng ta lấy đi các hộp và thay vào đó chỉ giữ các điểm đó trong không gian, chúng ta vẫn có lưới, chúng ta không có các hộp.
Bạn vẫn có thể sử dụng tất cả các thuật toán tìm đường yêu thích của mình với các điểm / nút mà bạn đã làm với lưới và hơn thế nữa. Tính khoảng cách giữa chúng và áp dụng trọng số cho khoảng cách đó (dijoksra và A *), Cho phép tác nhân xem xét các nút nhân cùng một lúc (logic mờ), theo dõi chuyển động của người chơi thông qua mẫu lưới đã đặt, sau đó đưa ra trọng số đến một tập hợp các quy tắc tương ứng, và sau đó có tác nhân chọn một phản hồi dựa trên trọng số cao nhất (hệ thống exert).
Lưới chỉ là một hình đại diện mà người chơi có thể không bao giờ nhìn thấy (trừ khi bạn thực sự muốn vẽ những ô đó trên màn hình, ở dạng 2D, nhưng nếu ở góc nhìn 3D có thể gây nhầm lẫn nhanh chóng, đặc biệt là nếu máy ảnh có thể xoay).
bạn có thể giải thích ý của bạn khi bạn nói không - 'nhưng tất cả việc giữ sách của bạn có thể sẽ cần phải có giá trị cụ thể là trung tâm, và cuối cùng, điều này sẽ không được sạch sẽ / hiệu quả. "
Tôi có nghĩa là mỗi tác nhân phải thực hiện cùng một cách làm tròn cho các lần nhấp chuột của bạn, điều này rất có giá trị trung tâm và cuối cùng bạn phải thực hiện rất nhiều công việc dọn dẹp các giá trị được mã hóa cứng và bạn nhận được cùng một kết quả chạy kiểm tra như khi làm if(X>300){//do something}
. nhưng nếu bạn chỉ tìm thấy các nút gần nhất ở đây (tùy thuộc vào bạn nếu bạn muốn có đường chéo) và nếu bạn thực sự muốn, bạn có thể sử dụng logic tương tự cho các lần nhấp chuột thay vì làm tròn các giá trị chỉ cần chọn tia để tìm nút gần nhất .