Góc giữa hai điểm


9

Tôi có một nhân vật đi đến các điểm ngẫu nhiên trong phòng của tôi trong Unity. Vấn đề là anh ta luôn phải đối mặt với một hướng, tôi muốn viết bằng C # một đoạn mã sẽ lấy hướng mà nhân vật hiện đang đối mặt và vị trí của mục tiêu, sau đó tìm ra góc giữa chúng để xoay số lượng nhân vật đó. Tôi đã thử LookAtchức năng nhưng điều đó làm cho nhân vật đi theo hình vòng cung về phía mục tiêu trông rất không tự nhiên khi nó liên tục nhìn vào mục tiêu.


4
Tôi không thể viết một câu trả lời thích hợp bây giờ, nhưng bạn cần trig cơ bản. Google tọa độ cực và atan2.
jcora

Câu trả lời:


10

Hàm LookAt thực hiện điều này cho bạn. Bạn có thể đang sử dụng nó không đúng cách, hoặc có điều gì đó không ổn với tay lái của bạn nếu bạn gặp vấn đề với điều này. Bạn cũng có thể thử nó theo cách này:

//find the vector pointing from our position to the target
dir = (Target.position - transform.position).normalized;

//create the rotation to look at the target
rotation = Quaternion.LookRotation(dir);

Bây giờ bạn có thể chụp theo hướng xoay đó hoặc bạn có thể thực hiện từ từ theo thời gian. (từ từ theo thời gian có nghĩa là tất cả mã này cần phải đi vào chức năng cập nhật)

//rotate over time
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * RotationSpeed);

//snap rotation
transform.rotation = rotation;

Đối với 2D, một phương thức thay thế khác sẽ là Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))

void FixedUpdate () {// lấy hướng lái hiện tại để đến vị trí mục tiêu Vector3 walk = (this.mTargetPocation - this.transform.poseition) .n normalized; // bỏ qua 3d walk.y = 0.0f; đi bộ. Chuẩn hóa (); // di chuyển vào hướng mong muốn this.transform.LookAt (mTargetPocation); this .transform.TransTable (-walk); }} đây là cách tôi đã thiết lập chức năng lookat, tôi không thể nói điều gì sai với nó ngoại trừ tôi cho rằng có lẽ nó không nên ở fixedUpdate?
Darren

Tôi không chắc. Nó đang làm gì vậy Khi tôi làm việc chỉ đạo, tôi có các đường gỡ lỗi được vẽ ở khắp mọi nơi. Tôi có các dòng hiển thị hướng yêu tinh đang đối mặt, đường gia tốc và đường vận tốc. Đặt tất cả chúng thành các màu khác nhau để bạn biết đó là màu nào, điều này thực sự sẽ giúp với việc gỡ lỗi trực quan. Nó cho bạn biết cái nào không phù hợp và sau đó bạn có thể nhìn vào nó nhiều hơn.
MichaelHouse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.