Các đối tượng quay là những đối tượng xoay quanh một hoặc nhiều trục trong không gian 3D. Sử dụng sức mạnh tích hợp của động cơ mô phỏng Roblox, bạn có thể làm cho các đối tượng quay và tương tác với môi trường của chúng theo cách mô phỏng hành vi vật lý trong thế giới thực mà người chơi quen thuộc và dễ hiểu, chẳng hạn như trọng lực, khí động học và ma sát.
Sử dụng tệp Spinning Objects .rbxl làm tài liệu tham khảo, hướng dẫn này giải thích cách các lực vật lý ảnh hưởng đến chuyển động góc trong Studio, và cho bạn thấy nhiều kỹ thuật khác nhau để quay các đối tượng trong trò chơi của bạn với các hành vi quay khác nhau, bao gồm hướng dẫn về:
- Sử dụng một ràng buộc di chuyển AngularVelocity để quay toàn bộ lắp ráp với một vận tốc góc không đổi.
- Sử dụng một ràng buộc cơ khí HingeConstraint để quay một phần trong một lắp ráp với một vận tốc góc không đổi trong khi phần còn lại của lắp ráp vẫn đứng yên.
- Sử dụng phương thức ApplyAngularImpulse để quay một lắp ráp với một xung lực góc ban đầu để lắp ráp từ từ giảm tốc theo thời gian.
Chuyển động góc và các lực vật lý
Roblox Studio là một động cơ mô phỏng thế giới thực mô phỏng hành vi vật lý theo thời gian thực, vì vậy để dự đoán hành vi của các đối tượng quay trong trò chơi, điều quan trọng là có một hiểu biết tổng quát về cách các đối tượng quay trong đời thực với chuyển động góc.
Chuyển động góc, hay chuyển động quay, là chuyển động quanh một điểm hoặc trục cố định. Ví dụ, khi một cánh quạt có chuyển động góc, nó quay quanh trục quay ở giữa cánh quạt.

Chuyển động góc không thể tồn tại nếu không có các lực vật lý bên ngoài đẩy hoặc kéo các đối tượng để quay. Theo định luật chuyển động thứ nhất của Newton, các đối tượng đứng yên sẽ vẫn đứng yên và các đối tượng đang chuyển động sẽ vẫn chuyển động với một vận tốc không đổi trừ khi chúng bị tác động bởi một lực bên ngoài. Ví dụ, một cánh quạt đứng yên sẽ vẫn đứng yên trừ khi một lực vật lý như gió đẩy nó quay.
Mô men là thước đo của lực vật lý gây ra sự quay của các đối tượng, và nó chịu trách nhiệm cho việc các đối tượng đạt được gia tốc góc. Khái niệm này đặc biệt quan trọng để các đối tượng quay trong Studio; càng nhiều mô men bạn áp dụng cho các đối tượng, chúng càng có thể tăng tốc nhanh hơn.
Điều này là vì mô men cần phải lớn hơn bất kỳ lực vật lý hướng nào đang đẩy ngược lại đối tượng, chẳng hạn như trọng lực hoặc ma sát. Ví dụ, nếu bạn đặt cánh quạt vào đất, lực vật lý của gió cần phải vượt qua lượng ma sát từ đất để tiếp tục tăng tốc cánh quạt đang quay. Nếu lực của gió không lớn hơn nhiều so với ma sát từ đất, cánh quạt sẽ tăng tốc, chỉ là chậm hơn so với ví dụ trước.

Vận tốc góc là thước đo tỷ lệ quay của một đối tượng, hoặc tốc độ mà đối tượng quay quanh một điểm hoặc trục cố định trong một khoảng thời gian. Studio đo vận tốc góc theo số lượng radian mà một đối tượng quay mỗi giây. Có 2π radian (6.283) trong một vòng quay, vì vậy để một đối tượng thực hiện một vòng quay đầy đủ mỗi giây, nó phải có đủ mô men để quay khoảng 6 radian. Hiểu vận tốc góc là quan trọng để thiết kế lối chơi trong trò chơi của bạn vì nó giúp bạn xác định lượng mô men bạn cần để đạt được một gia tốc cụ thể cho các đối tượng quay của bạn.
Các phần tiếp theo sẽ đi sâu hơn vào những khái niệm này khi bạn học cách quay các đối tượng với vận tốc góc không đổi hoặc ban đầu với mô men cần thiết để vượt qua bất kỳ lực vật lý đối kháng nào trong môi trường. Khi bạn xem xét những khái niệm vật lý này với các kỹ thuật sắp tới, bạn có thể dự đoán chính xác hơn cách điều chỉnh các giá trị thuộc tính để đạt được bất kỳ hành vi quay lý tưởng nào trong Studio.
Duy trì một lực góc không đổi
Để một đối tượng đạt được và duy trì một vận tốc góc không đổi, nó cần một lực góc để vượt qua bất kỳ lực vật lý đối kháng nào có thể làm giảm vận tốc góc của đối tượng, hoặc khiến đối tượng vẫn đứng yên. Ví dụ, nếu bạn muốn một đối tượng có vận tốc góc là [0, 12, 0] trong Studio, bạn cần đủ mô men để đối tượng đạt được và duy trì 12 radian mỗi giây dọc theo trục Y trong môi trường của nó, hoặc khoảng hai vòng quay đầy đủ mỗi giây.
Lượng mô men bạn áp dụng cho các đối tượng của mình không chỉ phụ thuộc vào các lực vật lý đối kháng trong chính môi trường, chẳng hạn như trọng lực và ma sát, mà còn phụ thuộc vào chính đối tượng. Ví dụ, nếu bạn có hai đối tượng có cùng hình dạng đang quay trên cùng một trục, đối tượng lớn hơn với mô men quán tính lớn hơn sẽ cần nhiều mô men hơn để đạt được cùng một gia tốc góc.
Các phần phụ tiếp theo sử dụng các lắp ráp có hình dạng và kích thước khác nhau để dạy bạn cách quay toàn bộ một đối tượng hoặc chỉ một phần của đối tượng. Khi bạn thử nghiệm với các giá trị thuộc tính khác nhau, bạn sẽ học cách ước lượng lượng mô men tối đa bạn cần cho các lắp ráp trong trò chơi của riêng bạn.
Sử dụng các ràng buộc AngularVelocity
Các đối tượng AngularVelocity là một loại ràng buộc di chuyển áp dụng mô men lên toàn bộ lắp ráp để duy trì một vận tốc góc không đổi. Để bắt đầu quay lắp ráp, ràng buộc AngularVelocity cần biết:
- Điểm và hướng dương hoặc âm để áp dụng một lực góc.
- Số lượng radian bạn muốn lắp ráp quay mỗi giây.
- Lượng mô men tối đa mà động cơ có thể áp dụng để lắp ráp đạt được một vận tốc góc không đổi.
Để minh họa quy trình này, bạn sẽ thêm một khối vào không gian làm việc của mình với một điểm gắn mà ràng buộc AngularVelocity tham chiếu để quay khối 6 radian mỗi giây dọc theo trục Y của thế giới với một vận tốc góc không đổi, hoặc khoảng một vòng quay đầy đủ.

Thêm điểm gắn
Bạn có thể chỉ định điểm cố định để quay một lắp ráp bằng cách thêm một đối tượng Attachment vào lắp ráp, sau đó cấu hình vị trí của điểm gắn trong không gian 3D. Trò chơi mẫu Spinning Objects đặt một điểm gắn ở trung tâm của một phần khối để ràng buộc có thể quay phần đó theo chiều ngược kim đồng hồ quanh trung tâm của chính nó.
Các điểm gắn bao gồm các hỗ trợ hình ảnh để giúp bạn hình dung các trục quay của chúng. Mũi tên màu vàng chỉ ra trục chính của điểm gắn, và mũi tên màu cam chỉ ra trục phụ của điểm gắn. Mặc dù không trục quay nào ảnh hưởng đến sự quay của khối trong các bước của kỹ thuật này, nhưng điều quan trọng là hiểu các hỗ trợ hình ảnh này để tham khảo trong tương lai vì chúng có thể giúp bạn xác định hành vi lý tưởng cho các loại ràng buộc khác nhau, chẳng hạn như HingeConstraint trong kỹ thuật tiếp theo.

Để thêm một điểm gắn:
Trong cửa sổ Explorer, chèn một phần khối vào Workspace.

Chèn một điểm gắn vào phần mới.
- Trong cửa sổ Explorer, di chuột qua phần và nhấp vào nút ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu, chèn một Attachment. Điểm gắn hiển thị ở trung tâm của phần.
- Đổi tên điểm gắn thành SpinAttachment.

Cấu hình ràng buộc
Bây giờ khối của bạn đã có một điểm cố định để quay khối, bạn có thể cấu hình các thuộc tính của ràng buộc AngularVelocity để chỉ định hướng quay, trục hoặc các trục để áp dụng một vận tốc góc không đổi mục tiêu, số lượng radian bạn muốn khối quay mỗi giây, và lượng mô men tối đa mà động cơ có thể áp dụng để khối đạt được một vận tốc góc không đổi.
Trò chơi mẫu Spinning Objects áp dụng tối đa 1000 Rowton-studs của lực góc không đổi để quay khối 6 radian mỗi giây dọc theo trục Y của thế giới với một vận tốc góc không đổi. Rowton-studs là đơn vị vật lý chính của Roblox để đo mô men. Để tham khảo các đơn vị vật lý của Roblox và cách chúng chuyển đổi sang các đơn vị mét, hãy xem Đơn vị Roblox.
Để cấu hình một ràng buộc AngularVelocity:
Để làm cho ràng buộc hiển thị trong viewport để bạn có thể tham khảo hướng quay của nó, hãy bật Hiển thị Chi tiết Ràng buộc từ menu Xem của Studio.
Chèn một ràng buộc AngularVelocity vào phần.
- Trong cửa sổ Explorer, di chuột qua phần, sau đó nhấp vào biểu tượng ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu ngữ cảnh, chèn AngularVelocity. Hỗ trợ hình ảnh của ràng buộc hiển thị ở giữa phần.
Gán điểm gắn của phần cho ràng buộc mới.
- Trong cửa sổ Explorer, chọn ràng buộc.
- Trong cửa sổ Thuộc tính,
- Đặt Attachment0 thành SpinAttachment.
- Đặt AngularVelocity thành 0, 6, 0 để quay phần 6 radian mỗi giây dọc theo trục Y. Lưu ý rằng nếu bạn đặt thuộc tính này thành 0, -6, 0, khối sẽ quay theo chiều kim đồng hồ.
- Đặt MaxTorque thành 1000 để áp dụng tối đa 1000 Rowton-studs của lực góc không đổi mỗi giây để đạt được vận tốc góc mục tiêu.
- Giữ RelativeTo là World để quay khối tương đối với vị trí và hướng của thế giới.

Xác minh lượng mô men bạn đã đặt quay khối 6 radian mỗi giây dọc theo trục Y của thế giới.
Chọn chế độ mô phỏng Chạy từ menu thả xuống của mezzanine và nhấp vào nút Chơi để bắt đầu. Studio mô phỏng trò chơi ở vị trí camera hiện tại mà không có nhân vật của bạn trong không gian 3D.

Bạn có thể cần điều chỉnh mô men của mình tùy thuộc vào tỷ lệ của khối và bất kỳ lực vật lý đối kháng nào trong môi trường của bạn. Ví dụ, các thuộc tính của ràng buộc AngularVelocity trong trò chơi mẫu hoạt động cho một phần khối có kích thước mặc định là 4, 1, 2 trên một nền phẳng với vật liệu nhựa, và một môi trường với trọng lực cài đặt mặc định.
Tuy nhiên, nếu khối của bạn có kích thước lớn hơn và trên địa hình cỏ, bạn cần tăng thuộc tính AngularVelocity.MaxTorque của mình vì lực góc cần phải vượt qua cả khối lượng của khối và ma sát từ môi trường. Ví dụ, phần khối lớn gấp bốn lần kích thước của phần mẫu cần ít nhất 300000 Rowton-studs của lực góc không đổi để đạt được vận tốc góc đã đặt!
Sử dụng các ràng buộc HingeConstraint
Các đối tượng HingeConstraint là một loại ràng buộc cơ khí cho phép hai điểm gắn quay quanh một trục, ràng buộc các điểm gắn ở cùng một vị trí và các trục chính của chúng theo cùng một hướng. Khi bạn đặt HingeConstraint.ActuatorType thành Motor, ràng buộc này áp dụng mô men lên hai điểm gắn với mục tiêu là các điểm gắn đạt được và duy trì một vận tốc góc không đổi.
Hơn nữa, khi bạn đặt các điểm gắn vào một lắp ráp với hai đối tượng, các đối tượng sẽ khóa lại với nhau và cố gắng quay cùng nhau theo trục chính cố định của điểm gắn. Nếu bạn neo một trong những đối tượng này, lực góc sẽ tiếp tục quay đối tượng kia với một vận tốc góc không đổi trong khi phần còn lại của lắp ráp vẫn đứng yên.
Ví dụ, để bắt đầu quay một đối tượng cụ thể trong một lắp ráp, ràng buộc HingeConstraint cần biết:
- Vị trí mà bạn muốn các điểm gắn chồng lên nhau.
- Điểm và hướng dương hoặc âm để áp dụng một lực góc.
- Số lượng radian bạn muốn điểm gắn quay mỗi giây.
- Lượng mô men tối đa mà động cơ có thể áp dụng để điểm gắn đạt được một vận tốc góc không đổi.
Để minh họa quy trình này, bạn sẽ thêm một lắp ráp cánh quạt với hai đối tượng vào không gian làm việc của mình với các điểm gắn trong cả hai đối tượng mà ràng buộc HingeConstraint tham chiếu để quay cánh quạt 3 radian mỗi giây (khoảng một nửa vòng quay đầy đủ mỗi giây) dọc theo trục Y với một vận tốc góc không đổi trong khi phần đế của cánh quạt vẫn đứng yên.

Lấy tài sản cánh quạt
Cửa hàng Tạo là một tab của Toolbox mà bạn có thể sử dụng để tìm tất cả các tài sản được tạo bởi Roblox và cộng đồng Roblox để sử dụng trong các dự án của bạn, bao gồm mô hình, hình ảnh, lưới, âm thanh, plugin, video và tài sản phông chữ. Bạn có thể sử dụng Cửa hàng Tạo để thêm một tài sản cá nhân hoặc thư viện tài sản trực tiếp vào một trò chơi đang mở.
Hướng dẫn này tham chiếu một mô hình cánh quạt mà bạn có thể sử dụng khi bạn sao chép từng bước của kỹ thuật HingeConstraint để quay các đối tượng. Để lấy tài sản cánh quạt này từ kho của bạn vào trò chơi của bạn:
Thêm cánh quạt vào kho của bạn.
- Điều hướng đến trang chi tiết của tài sản trên Cửa hàng Tạo.
- Ở góc trên bên phải, nhấp vào nút Lấy Mô hình. Tài sản cánh quạt hiện đã có trong kho của bạn, và bạn có thể sử dụng lại nó trong bất kỳ dự án nào trên nền tảng.
Trong Studio, điều hướng đến tab Trang chủ, sau đó nhấp vào nút Toolbox. Cửa sổ Toolbox mở ra.

Trong cửa sổ Toolbox, nhấp vào tab Kho. Phân loại Mô hình của tôi hiển thị.

Nhấp vào ô Cánh quạt. Mô hình hiển thị trong viewport của bạn.

Cấu hình các điểm gắn
Bạn có thể chỉ định cả vị trí mà bạn muốn các điểm gắn chồng lên nhau và hướng chuyển động quay để quay một đối tượng cụ thể trong một lắp ráp bằng cách thêm hai đối tượng Attachment vào lắp ráp, sau đó cấu hình sự căn chỉnh và định hướng của chúng trong không gian 3D.
Trò chơi mẫu Spinning Objects căn chỉnh hai điểm gắn gần vị trí mà cánh quạt không neo chồng lên đế đã neo, và định hướng trục chính quay của chúng hướng lên trên để chúng quay theo chiều ngược kim đồng hồ. Điểm gắn ở đế không thể quay trong ví dụ này vì đế đã được neo.
Để cấu hình các điểm gắn cho ràng buộc bản lề:
Chèn một đối tượng Attachment vào Head và Base.
- Trong cửa sổ Explorer, di chuột qua Head và nhấp vào nút ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu, chèn một Attachment.
- Lặp lại quy trình này cho Base.
- Đổi tên cả hai điểm gắn thành HeadAttachment và BaseAttachment, tương ứng.

Xoay HeadAttachment và BaseAttachment sao cho trục chính của mỗi điểm gắn hướng lên trên trên trục Y. Điều này cho Studio biết để quay các điểm gắn theo chiều ngược kim đồng hồ.

Di chuyển BaseAttachment lên đỉnh của Base, và HeadAttachment xuống cạnh dưới của Propeller. Điều này cho Studio biết nơi kết nối bản lề, và chồng lên cả hai điểm gắn tại thời gian chạy.

Cấu hình ràng buộc
Bây giờ các điểm gắn của bạn đã có vị trí để chồng lên nhau và một hướng chuyển động quay, bạn có thể cấu hình các thuộc tính của ràng buộc HingeConstraint để chỉ định số lượng radian bạn muốn điểm gắn quay mỗi giây, và lượng mô men tối đa mà động cơ có thể áp dụng để điểm gắn đạt được một vận tốc góc không đổi.
Tương tự như kỹ thuật trước, trò chơi mẫu Spinning Objects áp dụng tối đa 1000 Rowton-studs của lực góc không đổi để quay điểm gắn 3 radian mỗi giây dọc theo trục Y với một vận tốc góc không đổi. Tuy nhiên, vì điểm gắn ở đế nằm trong một đối tượng đã được neo, chỉ điểm gắn của cánh quạt có thể quay.
Để cấu hình một ràng buộc bản lề:
Chèn một đối tượng HingeConstraint vào Head.
- Trong cửa sổ Explorer, di chuột qua Head, sau đó nhấp vào biểu tượng ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu ngữ cảnh, chèn một HingeConstraint.
Gán các điểm gắn của cánh quạt cho ràng buộc mới để cánh quạt quay liên quan đến đế đã được neo.
- Trong cửa sổ Explorer, chọn ràng buộc.
- Trong cửa sổ Thuộc tính,
- Đặt Attachment0 thành BaseAttachment.
- Đặt Attachment1 thành HeadAttachment. Bản lề hiển thị trong viewport.

Trong cửa sổ Explorer, chọn ràng buộc, sau đó trong cửa sổ Thuộc tính,
- Đặt ActuatorType thành Motor. Các trường thuộc tính mới hiển thị.
- Đặt MotorMaxTorque thành 1000 để áp dụng tối đa 1000 Rowton-studs của lực góc không đổi để đạt được vận tốc góc mục tiêu.
- Đặt AngularVelocity thành 3 để quay đầu của cánh quạt 3 radian mỗi giây.

Xác minh lượng mô men bạn đã đặt quay cánh quạt 3 radian mỗi giây dọc theo trục Y.
Chọn chế độ mô phỏng Chạy từ menu thả xuống của mezzanine và nhấp vào nút Chơi để bắt đầu. Studio mô phỏng trò chơi ở vị trí camera hiện tại mà không có nhân vật của bạn trong không gian 3D.

Áp dụng một lực góc ban đầu
Một cách khác để thay đổi vận tốc góc của một đối tượng là áp dụng một xung lực góc. Sau xung lực góc, đối tượng sẽ giảm tốc cho đến khi trở thành đứng yên nếu có một lực đối kháng như ma sát, hoặc vẫn chuyển động với vận tốc không đổi nếu không có bất kỳ lực đối kháng nào.
Kỹ thuật này hữu ích để quay các đối tượng sau một sự kiện lối chơi hoặc thời tiết đáng kể, chẳng hạn như một cơn gió mạnh, vì nó cung cấp phản hồi tức thì cho người chơi. Để minh họa, phần phụ tiếp theo sẽ dạy bạn cách quay một lắp ráp với một lực góc ngẫu nhiên ban đầu mà bạn có thể điều chỉnh với các giá trị mới để đáp ứng yêu cầu lối chơi của riêng bạn.
Sử dụng ApplyAngularImpulse
Phương thức ApplyAngularImpulse áp dụng mô men lên toàn bộ lắp ráp để đạt được một vận tốc góc ban đầu trước khi giảm tốc đến một điểm dừng. Để bắt đầu quay lắp ráp, phương thức cần biết:
- Lắp ráp để quay.
- Trục để áp dụng mô men để đạt được một vận tốc góc ban đầu.
- Lượng mô men để áp dụng cho mỗi trục.
Bạn có thể định nghĩa tất cả các giá trị này trong một kịch bản. Ví dụ, kịch bản mẫu định nghĩa lắp ráp để quay là cha của kịch bản, sau đó áp dụng một xung lực ngẫu nhiên của lực góc giữa 0 và 100 Rowton-studs trên trục Y.
Để quay một lắp ráp bằng cách sử dụng ApplyAngularImpulse:
Chèn một phần cầu vào Workspace. Mẫu sử dụng một cầu với một MaterialVariant để bạn có thể dễ dàng hình dung chuyển động của cầu.

Chèn một kịch bản vào phần mới.
- Trong cửa sổ Explorer, di chuột qua phần và nhấp vào nút ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu, chèn một Script.
Thay thế mã mặc định bằng mã sau:
local part = script.Parent
local impulse = Vector3.new(0, math.random(0, 100), 0)
part:ApplyAngularImpulse(impulse)