Tôi xoay nhân vật trò chơi của mình để xem mục tiêu bằng mã sau:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQu Parention là vòng quay hiện tại của nhân vật khi có mục tiêu mới.
lookQu Parention là hướng mà nhân vật nên nhìn và nó được đặt như thế này:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
TurnN normalizer chỉ được Time.deltaTime
tăng lên và turningSpeed
là một giá trị tĩnh được đưa ra trong trình chỉnh sửa.
Vấn đề là trong khi hầu hết các nhân vật quay đầu, thì nó lại gặp vấn đề khi phải làm gần 180 độ. Sau đó, nó đôi khi jitter và phản ánh xoay vòng:
Trong hình ảnh được vẽ kém này, nhân vật (bên phải) bắt đầu quay về phía vòng tròn bên trái. Thay vì chỉ xoay qua trái hoặc phải, nó bắt đầu "điệu nhảy gương" này:
- Nó bắt đầu xoay về phía đối diện mới
- Sau đó, nó đột nhiên chộp vào cùng một góc nhưng ở phía bên kia và tiếp tục quay
Nó thực hiện việc "phản chiếu" này rất lâu cho đến khi nó nhìn vào mục tiêu. Đây có phải là một điều với quernions, slerping / lerping hoặc cái gì khác?
EDIT1: Rõ ràng vấn đề không phát sinh từ chính việc xoay vòng. Vấn đề có nhiều khả năng là nhân vật di chuyển về phía mặt trong khi nó xoay. Khi giới hạn góc, giữa đối diện và mục tiêu, khi nhân vật được phép di chuyển sẽ giảm và đôi khi loại bỏ xoay xoay / phản chiếu.
Điều này tất nhiên đặt ra nhiều câu hỏi hơn, tại sao nhân vật không thể di chuyển và xoay cùng một lúc mà không gặp vấn đề gì? Mã được sử dụng cho phong trào:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);