Vật thể di chuyển là những vật thể di chuyển trên 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 vật thể di chuyển 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 Vật thể Di chuyển .rbxl như một 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 tuyến tính trong Studio, và cho bạn thấy các kỹ thuật khác nhau để di chuyển các vật thể từ điểm A đến điểm B trong trải nghiệm của bạn với các hành vi di chuyển khác nhau, bao gồm cả hướng dẫn về:
- Sử dụng ràng buộc di chuyển LinearVelocity để di chuyển toàn bộ lắp ráp với vận tốc tuyến tính không đổi.
- Sử dụng ràng buộc PrismaticConstraint để hạn chế một lắp ráp trên một trục duy nhất và di chuyển nó với vận tốc tuyến tính không đổi tương đối với một điểm trong không gian 3D.
- Sử dụng phương thức ApplyImpulse để di chuyển một lắp ráp với một cú sốc ban đầu của lực sao cho lắp ráp giảm tốc từ từ theo thời gian.
Chuyển động tuyến tính 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 cách mà các vật thể di chuyển tuyến tính có thể hành xử trong trải nghiệm, điều quan trọng là phải có hiểu biết tổng quan về cách mà các vật thể di chuyển trong cuộc sống thực với chuyển động tuyến tính.
Chuyển động tuyến tính là chuyển động dọc theo một trục. Ví dụ, khi một khối có chuyển động tuyến tính, nó di chuyển dọc theo một trục đã xác định.

Chuyển động tuyến tính không thể tồn tại mà không có các lực vật lý bên ngoài đẩy hoặc kéo các vật thể để di chuyển. Theo định luật đầu tiên của Newton, các vật thể đứng yên sẽ vẫn đứng yên và các vật thể đang chuyển động sẽ giữ nguyên chuyển động với 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 khối đứng yên sẽ vẫn đứng yên trừ khi có một lực vật lý như gió đẩy nó di chuyển.
Lực là thước đo hướng và độ lớn của một lực đẩy hoặc kéo vật lý khiến các vật thể thay đổi vận tốc tuyến tính của chúng dọc theo một trục. Sự thay đổi vận tốc được gọi là gia tốc. Khái niệm này đặc biệt quan trọng để các vật thể có thể di chuyển trong Studio; càng nhiều lực bạn áp dụng cho các vật thể, chúng sẽ càng nhanh chóng gia tốc hơn.
Điều này là do lực cần phải lớn hơn bất kỳ lực vật lý nào đang đẩy ngược lại với vật thể, chẳng hạn như trọng lực hoặc ma sát. Ví dụ, nếu bạn đặt khối trên một tấm kim loại, lực vật lý của gió cần phải vượt qua lượng ma sát từ tấm kim loại để tiếp tục gia tốc khối. Nếu lực của gió không lớn hơn nhiều so với ma sát từ tấm kim loại, khối sẽ gia tốc, chỉ chậm hơn ví dụ trước.

Vận tốc tuyến tính là thước đo chuyển động của một vật thể, hoặc tốc độ mà vật thể thay đổi vị trí của nó dọc theo một trục theo thời gian. Studio đo vận tốc tuyến tính dựa trên số lượng studs mà một vật thể di chuyển mỗi giây. Stud là đơn vị vật lý chính của Roblox để đo chiều dài, và mỗi stud tương đương với khoảng 28cm trong thế giới thực.

Hiểu vận tốc tuyến tính là quan trọng để thiết kế gameplay trong các trải nghiệm của bạn vì nó giúp bạn xác định lượng lực cần thiết để đạt được một tốc độ nhất định cho các vật thể di chuyển của bạn. Ví dụ, khi bạn muốn đẩy các vật thể lên cao, điều quan trọng là cân nhắc cách bạn phải điều chỉnh lực của bạn để vượt qua trọng lực trong môi trường để các vật thể di chuyển chính xác.
Các phần tiếp theo phân tích sâu hơn về những khái niệm này khi bạn học cách di chuyển các vật thể với vận tốc tuyến tính không đổi hoặc ban đầu với lực 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 các 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 chuyển động tuyến tính lý tưởng nào trong Studio.
Duy trì vận tốc tuyến tính không đổi
Để một vật thể đạt được và duy trì vận tốc tuyến tính không đổi, nó cần một lực để vượt qua bất kỳ lực vật lý đối kháng nào làm chậm vận tốc tuyến tính của vật thể hoặc khiến vật thể không di chuyển. Ví dụ, nếu bạn muốn một vật thể có vận tốc tuyến tính là [0, 12, 0] trong Studio, bạn cần đủ lực để vật thể đạt được và duy trì 12 studs mỗi giây dọc theo trục Y trong môi trường của nó.
Khối lượng lực cần thiết 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 vật thể. Ví dụ, nếu bạn có hai vật thể cùng hình dạng đang di chuyển trên cùng một trục, vật thể có khối lượng lớn hơn cần nhiều lực hơn để đạt được cùng một gia tốc tuyến tính.
Các tiểu chủ đề 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 di chuyển toàn bộ một vật thể hoặc chỉ một phần của vật thể với vận tốc tuyến tính không đổi. 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 lực tối đa bạn cần cho các lắp ráp trong các trải nghiệm của riêng bạn.
Sử dụng ràng buộc LinearVelocity
Đối tượng LinearVelocity là một loại ràng buộc di chuyển mà áp dụng lực cho toàn bộ lắp ráp để duy trì vận tốc tuyến tính không đổi. Bằng cách không khóa vị trí của lắp ráp trên một trục trong suốt chuyển động của nó, lắp ráp có thể tự do quay khi va chạm với các vật thể khác trong không gian 3D. Loại chuyển động này dẫn đến những tình huống gameplay bất ngờ mà người chơi khó dự đoán hơn.
Để bắt đầu di chuyển lắp ráp, ràng buộc LinearVelocity cần biết:
- Điểm và hướng dương hoặc âm để áp dụng lực.
- Số lượng studs bạn muốn lắp ráp di chuyển mỗi giây.
- Số lượng lực tối đa mà động cơ có thể áp dụng để lắp ráp đạt được vận tốc tuyến tính không đổi.
Để minh họa quy trình này, bạn sẽ cấu hình một chiếc lá sen với một phép gắn kết mà ràng buộc LinearVelocity tham chiếu để di chuyển lá sen 15 studs mỗi giây dọc theo trục X âm của thế giới với vận tốc tuyến tính không đổi.

Thêm phép gắn kết
Bạn có thể chỉ định điểm để áp dụng lực 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 phép gắn kết trong không gian 3D. Trải nghiệm Vật thể Di chuyển mẫu đặt một phép gắn kết ở trung tâm của lá sen để ràng buộc có thể di chuyển lưới từ phép gắn kết theo một trục nhất định.
Các phép gắn kết bao gồm các công cụ trực quan để giúp bạn hình dung các trục chuyển động của chúng. Mũi tên màu vàng biểu thị trục chính của phép gắn kết, và mũi tên màu cam biểu thị trục thứ cấp của phép gắn kết. Trong khi không trục nào của chuyển động ảnh hưởng đến chuyển động của lá sen trong các bước kỹ thuật này, điều quan trọng là hiểu những công cụ trực quan 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ư PrismaticConstraint trong kỹ thuật tiếp theo.

Để thêm một phép gắn kết:
Trong cửa sổ Explorer, mở rộng thư mục LinearVelocityExample, sau đó mở rộng mô hình con LilyPad_DIY.
Chèn một phép gắn kết vào lưới Pad.
- Di chuột qua lưới và nhấp vào nút ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu, chèn một Attachment. Phép gắn kết hiển thị ở trung tâm của phần.
- Đổi tên phép gắn kết thành MoveAttachment.

Cấu hình ràng buộc
Bây giờ mà lưới của bạn có một điểm cố định để di chuyển lá sen, bạn có thể cấu hình các thuộc tính của ràng buộc LinearVelocity để chỉ định hướng và độ lớn cho vận tốc tuyến tính không đổi, số lượng studs mà bạn muốn lưới di chuyển mỗi giây, và số lượng lực tối đa mà động cơ có thể áp dụng cho lưới để đạt được vận tốc tuyến tính không đổi.
Trải nghiệm Vật thể Di chuyển mẫu áp dụng tới 5000 Rowtons lực không đổi để di chuyển lá sen 15 studs mỗi giây dọc theo trục X âm của thế giới với vận tốc tuyến tính không đổi. Rowtons là đơn vị vật lý chính của Roblox để đo lực. Để tham khảo các đơn vị vật lý của Roblox và cách chúng được chuyển đổi thành các đơn vị mét, hãy xem Đơn vị Roblox.
Để cấu hình một ràng buộc LinearVelocity:
Để làm cho ràng buộc hiển thị trong viewport để bạn có thể tham khảo hướng đường thẳng của nó, 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 LinearVelocity vào lưới Pad.
- Trong cửa sổ Explorer, di chuột qua lưới, 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 LinearVelocity.
Gán phép gắn kết của lưới vào 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 MoveAttachment.
- Đặt MaxForce thành 5000 để áp dụng tối đa 5000 Rowtons lực không đổi để đạt được vận tốc tuyến tính mục tiêu.
- Giữ RelativeTo là World để di chuyển lá sen tương đối với vị trí và hướng của thế giới.
- Đặt VelocityConstraint thành Line để hạn chế lực dọc theo một đường thẳng từ phép gắn kết.
- Đặt LineDirection thành -1, 0, 0 để di chuyển lá sen dọc theo trục X âm của thế giới. Lưu ý rằng nếu bạn đặt thuộc tính này thành 1, 0, 0, lá sen sẽ di chuyển dọc theo trục X dương của thế giới.
- Đặt LineVelocity thành 15 để di chuyển lá sen 15 studs mỗi giây.

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

Sử dụng ràng buộc PrismaticConstraint
Đối tượng PrismaticConstraint là một loại ràng buộc cơ khí tạo ra một khớp rắn giữa hai phép gắn kết, cho phép các lắp ráp cha của chúng di chuyển dọc theo một trục tương ứng với nhau. Bằng cách khóa vị trí của cả hai lắp ráp trên một trục duy nhất, mỗi lắp ráp chỉ có thể quay nếu chúng quay cùng một hướng.
Loại chuyển động này dẫn đến các tình huống gameplay ổn định mà người chơi dễ dự đoán hơn. Ví dụ, trải nghiệm Vật thể Di chuyển mẫu sử dụng các đối tượng PrismaticConstraint để di chuyển các nền tảng gỗ mà người chơi có thể sử dụng để cẩn thận vượt qua một dòng sông lớn.
Khi bạn đặt PrismaticConstraint.ActuatorType thành Motor, ràng buộc này áp dụng lực lên hai phép gắn kết với mục tiêu đạt được và duy trì một vận tốc tuyến tính không đổi. Nếu bạn cố định một trong các lắp ráp cha của phép gắn kết, lực sẽ tiếp tục di chuyển lắp ráp không bị cố định với vận tốc tuyến tính không đổi trong khi lắp ráp được cố định vẫn giữ nguyên vị trí.
Để bắt đầu di chuyển lắp ráp, ràng buộc PrismaticConstraint cần biết:
- Điểm và hướng dương hoặc âm để áp dụng fuerza.
- Số lượng studs bạn muốn các phép gắn kết di chuyển mỗi giây.
- Số lượng lực tối đa mà động cơ có thể áp dụng cho các phép gắn kết và lắp ráp cha của chúng để đạt được vận tốc tuyến tính không đổi.
Để minh họa quy trình này, bạn sẽ cấu hình một lắp ráp gỗ với hai đối tượng có các phép gắn kết con mà ràng buộc PrismaticConstraint tham chiếu để di chuyển khúc gỗ 40 studs mỗi giây dọc theo trục X âm của thế giới với vận tốc tuyến tính không đổi.

Cấu hình các phép gắn kết
Bạn có thể chỉ định hướng để di chuyển 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 khả năng căn chỉnh và hướng của chúng trong không gian 3D. Trải nghiệm Vật thể Di chuyển mẫu căn chỉnh hai phép gắn kết dọc theo trục X của thế giới gần vị trí mà khúc gỗ không bị cố định chồng chất lên phần được cố định, và định hướng trục chính của mỗi phép gắn kết để hướng về phía trục X âm của thế giới.
Khi bạn cấu hình ràng buộc PrismaticConstraint trong phần tiếp theo, nó sẽ di chuyển khúc gỗ tương ứng với phần cố định. Nói cách khác, khúc gỗ sẽ di chuyển ra xa phần đứng yên mà không thể di chuyển vì nó được cố định trong không gian 3D.
Để cấu hình các phép gắn kết cho ràng buộc prismatic:
Trong cửa sổ Explorer, mở rộng thư mục PrismaticConstraintExample, sau đó mở rộng mô hình con Log_DIY.
Chèn một phép gắn kết vào lưới Log.
- Di chuột qua lưới và nhấp vào nút ⊕. Một menu ngữ cảnh hiển thị.
- Từ menu, chèn một Attachment. Phép gắn kết hiển thị ở trung tâm của phần.
- Đổi tên phép gắn kết thành LogAttachment.

Sử dụng cùng một quy trình, chèn một phép gắn kết vào phần Anchor, sau đó đổi tên phép gắn kết thành AnchorAttachment.

Sử dụng công cụ Chọn Xem như một tài liệu tham khảo cho tọa độ của thế giới, xoay LogAttachment và AnchorAttachment cho đến khi mỗi trục chính của phép gắn kết hướng về phía trục X âm của thế giới.

Đặt lại vị trí của AnchorAttachment sao cho cả hai phép gắn kết đều căn chỉnh trên trục X của thế giới.

Cấu hình ràng buộc
Bây giờ mà các phép gắn kết của bạn đã được căn chỉnh trên cùng một trục và đối diện với cùng một hướng mà bạn muốn khúc gỗ di chuyển, bạn có thể cấu hình các thuộc tính của ràng buộc PrismaticConstraint để chỉ định liệu có áp dụng vận tốc tuyến tính mục tiêu trong hướng dương hoặc âm của trục chính của mỗi phép gắn kết, số lượng studs bạn muốn các phép gắn kết di chuyển mỗi giây, và số lượng lực tối đa mà động cơ có thể áp dụng cho khúc gỗ để đạt được vận tốc tuyến tính không đổi.
Mặc dù bạn có thể chọn các giá trị khác nhau cho các trường hợp sử dụng của riêng bạn, trải nghiệm mẫu Vật thể Di chuyển áp dụng tối đa 50000 Rowtons lực không đổi để di chuyển các phép gắn kết 40 radians mỗi giây dọc theo trục X âm của thế giới với vận tốc tuyến tính không đổi. Tuy nhiên, vì phép gắn kết cố định nằm trong một đối tượng đã được cố định, chỉ có phép gắn kết của khúc gỗ mới có thể di chuyển.
Để cấu hình một ràng buộc prismatic:
Chèn một đối tượng PrismaticConstraint vào lưới Log.
- Trong cửa sổ Explorer, di chuột qua lưới, 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 PrismaticConstraint.
Gán các phép gắn kết của khúc gỗ vào ràng buộc mới sao cho khúc gỗ di chuyển tương ứng với khối cố định.
- Trong cửa sổ Explorer, chọn ràng buộc.
- Trong cửa sổ Thuộc tính,
- Đặt Attachment0 thành AnchorAttachment.
- Đặt Attachment1 thành LogAttachment. Ràng buộc 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 sẽ hiển thị.
- Đặt MotorMaxForce thành 50000 để áp dụng tối đa 50000 Rowtons lực không đổi để đạt được vận tốc tuyến tính mục tiêu.
- Đặt Velocity thành 40 để di chuyển khúc gỗ 40 studs mỗi giây.

Xác minh số lượng lực mà bạn đã cấu hình di chuyển khúc gỗ 40 studs mỗi giây dọc theo trục X âm của thế giới.
Chọn chế độ giả lập Chạy từ menu thả xuống của tầng trệt và nhấp vào nút Chơi để bắt đầu. Studio mô phỏng trải nghiệm ở 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 lực tuyến tính ban đầu
Một cách khác để thay đổi vận tốc tuyến tính của một vật thể là áp dụng một cú sốc lực. Sau cú sốc lực, vật thể sẽ giảm tốc cho đến khi trở nên đứng yên nếu có một lực đối kháng như ma sát, hoặc duy trì vận tốc tuyến tính không đổi nếu không có lực đối kháng nào.
Kỹ thuật này hữu ích để di chuyển các vật thể sau một sự kiện gameplay quan trọng, chẳng hạn như một vụ nổ hoặc va chạm mạnh, vì nó cung cấp phản hồi tức thì cho người chơi. Để minh họa, phần tiếp theo sẽ dạy bạn cách phóng nhân vật của người chơi lên trời khi họ va chạm với một tấm nhảy bằng một cú sốc 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 gameplay của riêng bạn.
Sử dụng ApplyImpulse
Phương thức ApplyImpulse áp dụng lực cho toàn bộ lắp ráp để đạt được vận tốc tuyến tính ban đầu trước khi dừng lại khi có các lực đối kháng. Để bắt đầu di chuyển lắp ráp, phương thức này cần biết:
- Lắp ráp để di chuyển.
- Trục để áp dụng lực để đạt được vận tốc tuyến tính ban đầu.
- Số lượng lực để á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 script. Ví dụ, script mẫu định nghĩa lắp ráp để di chuyển là đối tượng Humanoid của nhân vật người chơi, sau đó nó áp dụng một cú sốc lực là 2500 Rowton-giây để phóng người chơi lên cao trên trục Y dương của thế giới. Lưu ý rằng các nhân vật người chơi có khối lượng khác nhau, vì vậy bạn có thể cần tăng và cân bằng lực này để phóng tất cả người chơi mà không làm cho những nhân vật có khối lượng nhỏ hơn bị phóng lên quá cao.
Để di chuyển một lắp ráp bằng phương thức ApplyImpulse:
Trong cửa sổ Explorer, mở rộng thư mục ApplyImpulseExample, sau đó mở rộng mô hình con JumpPad_DIY.
Chèn một script vào phần JumpPad.
- 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. Phép gắn kết hiển thị ở trung tâm của phần.
- Đổi tên script thành JumpScript.
Thay thế mã mặc định bằng mã sau:
local volume = script.Parentlocal function onTouched(other)local impulse = Vector3.new(0, 2500, 0)local character = other.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and other.Name == "LeftFoot" thenother:ApplyImpulse(impulse)endendvolume.Touched:Connect(onTouched)