Tôi chuẩn bị đăng một liên kết đến blog Asteroid Base về kẻ thù Walker khi tôi nhận thấy karmington đã liên kết với bài báo Gamasutra trong một bình luận.
Mặc dù vậy, có lẽ nó đáng để đưa ra một chút khả năng hiển thị và giải thích như một câu trả lời.
Bí quyết là phát sóng . Chúng cho phép mã của bạn quét dọc theo một dòng cho một xung đột.
Để khiến Walker thẳng hàng với các bề mặt, họ bắn hai tia xuống địa hình, một từ bên trái của Walker và một từ bên phải (đường màu đỏ và màu vàng ở trên).
Từ mỗi đối tượng RaycastHit2D, bạn có thể có được một vectơ bình thường chỉ vuông góc với bề mặt (đường màu đỏ tươi và xanh lục). Bằng cách lấy trung bình các thông số từ hai lần truy cập, bạn sẽ có được một định hướng phù hợp cho nhân vật của mình phản ánh hợp lý địa hình bên dưới (đường màu lục lam).
Bạn có thể tác dụng một lực xuống dọc theo đường định hướng này để giữ cho nhân vật bị mắc kẹt trên địa hình (mặc dù điều này có thể gây ra một số trượt nếu ma sát thấp) hoặc đặt thủ công vị trí của nhân vật tại điểm giao cắt tia trung bình như được thực hiện với Walker.
Bạn sẽ muốn pha trộn định hướng của nhân vật dần dần để giữ cho nhân vật của bạn không bị rung hoặc nhìn robot (xem cách bình thường thay đổi mạnh khi Walker đi qua góc, nhưng cơ thể di chuyển trơn tru).
Nếu bạn có các góc nhọn trong địa hình, có thể bạn sẽ muốn nghiêng các tia này vào bên trong một chút - để nếu con nhện đi qua rìa của một vách đá 90 độ, tia sáng nhô ra sẽ chạm vào mặt vách đá.
Nhóm Asteroid Base cũng bắn một tia ngắn theo hướng chuyển động của Walker (không hiển thị), ghi đè lên tia ở phía đó nếu nó chạm vào địa hình. Điều đó đảm bảo người đi bộ không bị kẹt khi đi vào góc lõm 90 độ.
Theo các tài liệu, raycast 2D khác với 3D, ở chỗ nó phát hiện các máy va chạm trong đó tia bắt đầu. Điều đó nghe có vẻ khó hiểu với tôi, nhưng nếu thử nghiệm của bạn xác nhận điều này, bạn sẽ muốn sử dụng layerMask để hạn chế các tia để chỉ phát hiện các máy va chạm địa hình có thể leo được.