Sự khác biệt giữa Transform.translate và Rigidbody.velocity là gì?


7

Tôi đã buộc phải hiểu sự khác biệt giữa hai phương pháp di chuyển một cơ thể cứng nhắc này là gì. Cả hai dường như di chuyển đối tượng với tốc độ không đổi và cả hai đều hoạt động trên RigidBody. Vì vậy, sự khác biệt giữa hai và khi nào nên được sử dụng so với cái kia?

Câu trả lời:


15

transform.translatesẽ không sử dụng hệ thống vật lý (không tìm kiếm sự va chạm khi di chuyển, bỏ qua bất kỳ vận tốc hiện tại nào, v.v.), cũng không nhất thiết phải là chuyển động trơn tru (vì bạn có thể dịch bao xa tùy thích). Điều này về cơ bản là thiết lập một vị trí mới cho toàn bộ đối tượng, liên quan đến vị trí hiện tại. Đây sẽ là cách bạn nên di chuyển các đối tượng nếu bạn không muốn sử dụng vật lý. Vì đối tượng không có vật lý hoặc bạn muốn bỏ qua vật lý (như dịch chuyển tức thời).

rigidbody.velocitysử dụng hệ thống vật lý, và sẽ chủ yếu trơn tru (ngoại trừ vận tốc cực đoan). Điều này giống như nói cho các đối tượng di chuyển theo hướng nào, thay vì nói cho họ biết vị trí của nó. Chuyển động ở đây sẽ xem xét thế giới vật lý xung quanh nó. Nếu bạn đặt vận tốc về phía một bức tường vững chắc, hệ thống vật lý sẽ cố gắng thực hiện chuyển động đó và điều chỉnh vận tốc dựa trên sự va chạm với bức tường. Trong nhiều trường hợp, bạn có nhiều khả năng để lại vận tốc một mình và điều chỉnh gia tốc của vật thay vào đó, có khả năng bằng cách tác dụng một lực.


1
Một điều đáng chú ý là việc di chuyển máy va chạm vật lý đôi khitransform.translate có thể có hiệu suất kém hơn so với sử dụng một người cứng nhắc & vận tốc, như được thảo luận trong câu hỏi và câu trả lời này . Đối với các đối tượng không có máy va chạm thì đây không phải là vấn đề.
DMGregory

3

Họ làm những việc khác nhau, nhưng có thể được sử dụng để đạt được kết quả tương tự.

Đặt cơ thể velocityđặt tốc độ và hướng của nó. Miễn là cơ thể đang được hệ thống vật lý cập nhật, vận tốc của nó sẽ được thêm vào (một cách hiệu quả) vào vị trí của nó để đến một vị trí mới cho khung hình. Điều này làm cho vật thể di chuyển với tốc độ không đổi theo thời gian cho đến khi bạn thay đổi vận tốc sang thứ khác hoặc bằng không.

Các Translatephương pháp của Transformloại điều chỉnh bản dịch lưu trữ trong ma trận biến đổi của cơ thể bằng cách thêm bản dịch cung cấp cho nó. Điều này khiến đối tượng di chuyển ngay lập tức đến vị trí mới, một lần, bỏ qua hệ thống vật lý. Điều này sẽ không khiến đối tượng di chuyển theo thời gian trừ khi bạn liên tục gọi nó là mọi khung hình.

Sử dụng một trong đó có ý nghĩa nhất cho ngữ nghĩa bạn muốn khi tương tác với đối tượng. Nếu bạn chỉ muốn định vị nó một lần (hoặc thỉnh thoảng) và để nó ở đó, sử dụng translatelà tốt. Nếu bạn muốn nó di chuyển liên tục và tương tác độc đáo với các đối tượng vật lý khác, cài đặt velocitycó thể ít hoạt động hơn so với việc tự dịch nó theo từng khung hình.


0

Sự khác biệt bắt đầu quan trọng khi bạn có các cứng nhắc va chạm với nhau.

Thay đổi biến đổi "dịch chuyển" đối tượng đến một vị trí khác mà không cho nó bất kỳ động năng nào. Nó sẽ không tương tác với bất kỳ đối tượng nào trên đường đi. Nhưng di chuyển một vật thể bằng cách cho nó một vận tốc có nghĩa là nó sẽ đẩy các vật thể khác ra khỏi đường đi, điều này làm tăng tốc các vật thể khác và tự giảm tốc vật thể.

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.