Trong sự thống nhất, tôi có một cây vợt được cho là để đánh bóng, và vợt được điều khiển trực tiếp bằng chuột, tức là dơi đang được di chuyển bởi chuột sử dụng các trục chuột và hàm transform.translate() sử dụng để di chuyển vợt. Tôi dự kiến rằng vật lý của Unity3d sẽ không dịch chuyển động của vợt trực tiếp một cách thích hợp bằng trực tiếp bằng chuột và tác động đến quả bóng, và tôi sẽ phải viết một thứ gì đó tùy chỉnh, và hóa ra nó là đúng.Vấn đề với phát hiện va chạm của một quả bóng chuyển động nhanh với một cây vợt được điều khiển bằng chuột
Nhưng va chạm của quả bóng không được phát hiện đúng khi vợt đang di chuyển. Khi nó vẫn còn, tất cả mọi thứ là tốt, và bóng hành xử như tôi muốn.
Bây giờ tôi đã đi xa như viết một kịch bản vật lý tùy chỉnh (tôi sử dụng C# cho kịch bản), trong đó tôi đính kèm 4 raycast có chiều dài 0.6F vào bóng, và sau khi thực hiện một số tính toán vector phức tạp, tính toán vận tốc của quả bóng sau khi nhấn vợt, và áp dụng nó trực tiếp với vận tốc của quả bóng bằng cách sử dụng rigidbody.velocity = calculateVelocity(). Bây giờ nó là một lần nữa làm việc tốt khi vợt không di chuyển, nhưng không phải khi tôi di chuyển vợt. Vấn đề chính xác (triệu chứng của) là:
Sử dụng Vật lý tích hợp và phát hiện va chạm: Khi vợt đang di chuyển, quả bóng đôi khi đi thẳng qua vợt và đôi khi nó chậm lại (đến mức không thể tin được).
Sử dụng tập lệnh của tôi để tính toán vận tốc: Vấn đề là như nhau, nhưng nó cho phép tôi xác định những gì là sai khi tôi in bình thường của máy va chạm (vợt). Đôi khi nó cho phép bình thường, và đôi khi đưa ra âm tính của vectơ bình thường, có nghĩa là nó đang đi thẳng qua bề mặt trên cùng và phát hiện cú đánh với mặt dưới của máy va chạm (vợt).
Những điều tôi đã cố gắng:
Tăng kích thước của máy gia tốc (nó hoạt động với các máy gia tốc hộp rộng hơn trên vợt, nhưng sau đó rõ ràng là quả bóng di chuyển từ một khoảng cách khá xa vợt, và kịch bản của riêng tôi hoạt động ở đây, mặc định vật lý cho kết quả lạ khi vợt được di chuyển), trong ngắn hạn tôi không nhận được thực tế mà tôi muốn.
Giảm dấu thời gian cố định thành 0,001, cải thiện đáng kể mọi thứ, nhưng vẫn còn rất xa so với kết quả tôi muốn, và quả bóng lại một lần nữa thường chọn mặt sai của quả bóng.
Thay đổi phát hiện va chạm thành động liên tục. Mà cũng không cải thiện được gì.
Và ngoài các bên sai nhặt tại va chạm, một vấn đề khác tôi đã quan sát thấy là sau khi nảy ra khỏi vợt, bóng là di chuyển nhưng vợt được di chuyển nhanh hơn, nó thay vì di chuyển trong một vòng cung hoàn chỉnh hoặc dòng, bằng cách nào đó xuất hiện ở phía trước của quả bóng, dẫn đến hai lượt truy cập. Nó là một phỏng đoán dựa trên những gì có thể nhìn thấy được.
Ngoài ra, rõ ràng là khía cạnh "chuyển động" của vợt không được đọc bởi vật liệu dựng sẵn của Unity3d, dẫn đến hành vi lạ khi vợt di chuyển bằng chuột chạm vào quả bóng.
Tôi bị kẹt, tôi không biết di chuyển từ đâu đến đây. Xin cho tôi biết tôi đang làm gì sai.
Tôi đã thử đặt tốc độ tối đa cho cả vợt và quả bóng, tôi có thể tăng kích thước của toàn bộ môi trường, có lẽ điều này có thể cho cơ hội phát hiện phía bên phải của máy va chạm tốt hơn. Tôi sẽ thực hiện cả hai giải pháp được đưa ra bởi Justin808 và tăng kích thước của tất cả mọi thứ. – SpeedBirdNine
Điều này làm việc rất rực rỡ, tôi tăng gấp đôi kích thước của tất cả mọi thứ, và bây giờ nó không phải là thiếu một vụ va chạm. Tôi vẫn còn vấn đề khác mà Justin808 nói đến, rằng vợt tại một thời điểm là ở phía trước của quả bóng và khung tiếp theo nó là đằng sau quả bóng, nhưng ít nhất tôi thấy hai va chạm riêng biệt, có thể được xử lý bằng mã! Cảm ơn rất nhiều! Tôi chỉ mất 2 phút để làm. Bây giờ tôi sẽ thực hiện giải pháp của Justin để giải quyết hai vụ va chạm. Bởi thời gian này nếu ai đó có lời giải thích khác, xin vui lòng chia sẻ nó quá! – SpeedBirdNine
Ok vấn đề được giải quyết, tôi đã không phải đặt một raycast giữa vị trí trước đó và tiếp theo của quả bóng như bây giờ các va chạm của vợt là không thiếu bóng. Điều khác là chuyển động vợt thông qua chuột không dịch lực bổ sung áp dụng cho quả bóng. Tôi đã phải viết phần này bản thân mình, và thiết lập istrigger là đúng cho máy va chạm vợt để vật lý ban đầu không can thiệp. Nhưng bây giờ đã có một vấn đề đánh nhiều lần, tôi giải quyết nó bằng cách sử dụng một lá cờ, mà trở thành sai khi nhấn lần đầu tiên, và đúng một lần nữa sau 1 giây, hoặc khi bóng chạm một đối tượng khác. Những công việc này! – SpeedBirdNine