Đối với những người còn nhớ Descent Freespace, nó có một tính năng hay giúp bạn nhắm vào kẻ thù khi bắn tên lửa hoặc tia laze không bắn: nó cho thấy một con trỏ ở phía trước con tàu mà bạn đuổi theo nói cho bạn biết phải bắn vào đâu để di chuyển Mục tiêu.
Tôi đã thử sử dụng câu trả lời từ /programming/4107403/ai-alerskym-to-shoot-at-a-target-in-a-2d-game?lq=1 nhưng nó đã cho 2D nên tôi đã thử thích nghi với nó
Trước tiên, tôi đã phân tách phép tính để giải điểm giao nhau cho mặt phẳng XoZ và lưu tọa độ x và z rồi giải điểm giao nhau cho mặt phẳng XoY và thêm tọa độ y vào xyz cuối cùng mà sau đó tôi chuyển đổi sang không gian clip và đặt kết cấu vào đó tọa độ. Nhưng tất nhiên nó không hoạt động như bình thường nếu không tôi sẽ không đăng câu hỏi.
Từ những gì tôi nhận thấy sau khi tìm x trong mặt phẳng XoZ và trong XoY thì x không giống nhau nên có gì đó phải sai.
float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) -
ENG_Math.sqr(projectileSpeed);
float b = 2.0f * (targetVelocity.x * targetPos.x +
targetVelocity.y * targetPos.y);
float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y);
ENG_Math.solveQuadraticEquation(a, b, c, collisionTime);
TargetVelocity.y lần đầu tiên thực sự là targetVelocity.z (giống với targetPos) và lần thứ hai nó thực sự là targetVelocity.y.
Vị trí cuối cùng sau XoZ là
crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f,
minTime * finalEntityVelocity.z + finalTargetPos4D.z);
và sau XoY
crossPosition.y = minTime * finalEntityVelocity.y + finalTargetPos4D.y;
Là cách tiếp cận của tôi để tách thành 2 mặt phẳng và tính toán bất kỳ tốt? Hay đối với 3D có một cách tiếp cận hoàn toàn khác?
- sqr () là hình vuông không phải sqrt - tránh nhầm lẫn.