Chơi hoạt hình nhân vật là một phần quan trọng của những gì làm cho avatar và nhân vật không thể chơi (NPC) trở nên sống động, thực tế và hấp dẫn với khán giả của bạn.Ngoài việc cung cấp hình ảnh thu hút, hoạt hình nhân vật cung cấp phản hồi từ hành động của người chơi, hướng dẫn về cách di chuyển qua môi trường và thông tin quan trọng về nhân vật và người khác của họ.
Sử dụng tập tin Trạm Vũ Trụ Nguy Hiểm.rbxl như một tham khảo, hướng dẫn này cho bạn biết cách chơi hoạt hình nhân vật bằng hai kỹ thuật khác nhau, bao gồm hướng dẫn về:
- Trao đổi ID nguồn lưu lưu hoạt hình nhân vật mặc định với các hoạt hình tùy chỉnh riêng của bạn.
- Kích hoạt hoạt hình đáp lại hành động của nhân vật trong không gian 3D.
Sau khi hoàn thành hướng dẫn này, bạn sẽ có kỹ năng để tùy chỉnh hoạt họa cho nhiều tình huống chơi game khác nhau.
Thay đổi hoạt họa mặc định
Mỗi nhân vật với một đối tượng mặc định Humanoid , cho dù đó là một nhân vật được điều khiển bởi người chơi hay một nhân vật không phải người chơi (NPC), bao gồm một bộ hoạt hình mặc định chơi mỗi khi nhân vật thực hiện các hành động cụ thể trong kinh nghiệm, như chạy, leo trèo và nhảy.Roblox cung cấp các hoạt hình này bên ngoài hộp cho mỗi trải nghiệm mà không cần bất kỳ nỗ lực lập trình bổ sung nào.
Tuy nhiên, nếu các hoạt hình mặc định này không đáp ứng các yêu cầu thiết kế cho môi trường, thẩm mĩ hoặc tổng thể câu chuyện của thế giới của bạn, bạn có thể thay thế chúng bằng các hoạt hình tùy chỉnh áp dụng cho mọi người chơi tham gia trải nghiệm của bạn.Kỹ thuật thiết kế trò chơi này có thể giúp nhân vật và trải nghiệm của bạn cảm thấy cá nhân hơn, thú vị hơn và sâu sắc hơn.
Để minh họa, phần tiếp theo dạy bạn cách thay thế hoạt họa đi mặc định bằng hoạt họa chu kỳ đi bộ tùy chỉnh từ Tạo hoạt họa nhân vật.Sử dụng quá trình tương tự này, bạn có thể thay thế bất kỳ hoạt họa mặc định nào bằng ID hoạt họa riêng của bạn.
Tạo kịch bản
Mỗi đối tượng của mỗi nhân vật bao gồm một đối tượng con lưu tất cả các hoạt hình mặc định của nhân vật.Để thiết lập bất kỳ hoạt họa mặc định nào cho các ID tài sản mới, bạn phải tạo một kịch bản trong Class.ServiceScriptService để nó có thể tham chiếu và thay thế các giá trị mặc định của đối tượng Animator ngay khi người chơi tải vào trải nghiệm.
Để tạo một kịch bản sẽ tham chiếu các ID khả năng hoạt hình mặc định:
Trong cửa sổ Explorer , thêm một kịch bản mới vào ServerScriptService .
- Chuyển qua ServerScriptService và nhấp vào nút ⊕.
- Từ menu ngữ cảnh, chèn Tập lệnh .
Trong kịch bản mới, sao chép mã sau:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Tập lệnh ResetDefaultAnimations bắt đầu bằng cách nhận được dịch vụ Players, chứa tất cả các đối tượng Player cho người chơi khi họ kết nối với một máy chủ.Khi mỗi nhân vật của người chơi được tải vào trải nghiệm, chức năng onCharacterAdded chờ cho đến khi nó phát hiện các đối tượng Humanoid và Animator của nhân vật.
Khi nó phát hiện một đối tượng Animator lần đầu tiên, thì kịch bản sau đó in "Animator found!" để cho bạn biết rằng kịch bản đang hoạt động như dự định.
Thay thế assetID
Bây giờ bạn biết kịch bản của bạn có thể phát hiện khi người chơi tải và kết nối với máy chủ, bạn có thể chỉnh sửa kịch bản của mình để tham chiếu cụ thể về id hoạt hình bạn muốn trao đổi với các hoạt hình tùy chỉnh riêng của bạn.
Bảng sau đây chứa tất cả các hoạt hình nhân vật mặc định mà bạn có thể gọi và thay thế trong đối tượng Animator.Lưu ý rằng Idle có hai biến thể mà bạn có thể lập trình để chơi thường xuyên hơn hoặc ít hơn.
Hành động nhân vật | Tham chiếu kịch bản hoạt hình |
Chạy | animateScript.run.RunAnim.AnimationId |
Đi bộ | animateScript.walk.WalkAnim.AnimationId |
Nhảy | animateScript.jump.JumpAnim.AnimationId |
Rảnh rỗi | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Mùa thu | animateScript.fall.FallAnim.AnimationId |
Bơi | animateScript.swim.Swim.AnimationId |
Bơi (Nhàn rỗi) | animateScript.swimidle.SwimIdle.AnimationId |
Lên cao | animateScript.climb.ClimbAnim.AnimationId |
Để thay thế ID tài nguyên hoạt hình đi mặc định: replace the default walk animation assetID:
Gọi lại kịch bản hoạt hình mặc định, sau đó thay thế assetID bằng assetID hoạt hình tùy chỉnh của riêng bạn.Ví dụ, mã mẫu sau đây tham chiếu đến hoạt hình chu kỳ đi bộ từ Tạo hoạt hình nhân vật.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Thử nghiệm trải nghiệm của bạn để đảm bảo rằng hoạt hình tùy chỉnh của bạn thay thế hoạt hình mặc định.
Trong thanh công cụ, nhấp vào nút Chơi . Studio bước vào chế độ thử nghiệm.
Dạo quanh trạm vũ trụ với avatar của bạn.
Kích hoạt hoạt hình
Trong khi kỹ thuật trước đó tập trung vào việc thay thế các hoạt hình mặc định tự động chơi mỗi khi một nhân vật thực hiện các hành động trải nghiệm cụ thể, bạn có thể kích hoạt hoạt hình bằng cách lập trình để chơi đáp lại bất kỳ hành động nhân vật nào trong không gian 3D, chẳng hạn như nhặt một vật phẩm hoặc nhận sát thương từ một mối nguy hiểm.
Cách chơi hoạt hình này hữu ích vì nó cung cấp phản hồi ngay lập tức cho người chơi về cách họ nên tương tác với các đối tượng trong môi trường của họ.Để minh họa, phần tiếp theo cho bạn thấy cách kích hoạt hoạt hình bất cứ khi nào các nhân vật quá gần với các rò rỉ hơi nguy hiểm như một cách để nhẹ nhàng dạy người chơi tránh đi quá gần tường.
Nhúng âm lượng
Một trong những cách phổ biến nhất để kích hoạt hành vi chơi game duy nhất là sử dụng âm lượng , hoặc các khu vực không nhìn thấy bên trong không gian 3D, để phát hiện khi nào các nhân vật hoặc đối tượng tương tác với các khu vực cụ thể của môi trường.Khi bạn kết hợp các khối với các kịch bản, bạn có thể sử dụng phản hồi va chạm của chúng để kích hoạt các hành động theo chương trình, chẳng hạn như giảm sức khỏe của người chơi hoặc chơi một hoạt hình.

Khi thêm một khối lượng vào trải nghiệm của bạn, việc tăng quy mô là rất quan trọng để nó chỉ bao gồm không gian mà bạn muốn kích hoạt hoạt hình của mình.Nếu bạn làm cho âm lượng của mình quá nhỏ, người chơi có thể không bao giờ va chạm với khu vực để chơi hoạt họa; ngược lại, nếu bạn làm cho âm lượng của mình quá lớn, hoạt họa sẽ chơi trước khi người chơi đến được mục hoặc khu vực quan tâm, và họ có thể không hiểu những gì họ đã làm để kích hoạt hoạt họa.
Để chèn một khối lượng xung quanh một rò rỉ hơi sẽ kích hoạt một hoạt hình:
- Trong cửa sổ Explorer , thêm một phần khối mới.
- Vị trí và thay đổi kích cỡ khối cho đến khi nó bao phủ khu vực bạn muốn kích hoạt hoạt hình của mình.
- Trong cửa sổ Tính năng ,
Đặt Tên đến Máy phát hiện hoạt hình .
Thiết lập minh bạch đến 1 để làm cho khối trở nên vô hình.
Tạo kịch bản
Bây giờ bạn đã có một khu vực được xác định để kích hoạt hoạt hình của bạn, đã đến lúc tạo một kịch bản phát hiện chương trình bằng cách lập trình khi người chơi va chạm với âm lượng.Sau đó, bạn có thể lắng nghe sự kiện va chạm để kích hoạt bất kỳ hoạt hình nào có ý nghĩa cho yêu cầu chơi trò chơi của bạn.
Ví dụ, kỹ thuật hoạt hình này sử dụng một LocalScript thay vì một Script để cung cấp phản hồi ngay lập tức cho người chơi khi chúng va chạm với âm lượng.Nếu máy chủ lắng nghe va chạm và phát lại hoạt hình, có thể có một khoảng thời gian trễ giữa người chơi chạm vào âm lượng trên máy khách và xem hoạt hình phát vì thời gian sao chép từ máy chủ đến máy khách.
Để tạo một kịch bản địa phương sẽ phát hiện khi nhân vật của người chơi địa phương chạm vào âm lượng:
Trong cửa sổ Explorer , thêm một kịch bản mới vào StarterCharacterScripts .Vị trí này đảm bảo kịch bản và con của nó nhân bản vào nhân vật người chơi khi tham gia và khi chúng hồi sinh trở lại trong trải nghiệm.
- Mở rộng StarterPlayer , sau đó di chuột qua con trẻ của nó StarterCharacterScripts và nhấp vào nút ⊕.
- Từ menu ngữ cảnh, chèn LocalScript và đổi tên thành TriggerAnimation .
Trong kịch bản mới, sao chép mã sau:
local Workspace = game:GetService("Workspace")local animation = script:WaitForChild("Animation")local humanoid = script.Parent:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")local animationTrack = animator:LoadAnimation(animation)local animationDetector = Workspace:WaitForChild("AnimationDetector")local debounce = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
Tập lệnh TriggerAnimation bắt đầu bằng cách nhận được dịch vụ Workspace , chứa tất cả các đối tượng tồn tại trong thế giới 3D.Điều này rất quan trọng vì kịch bản cần tham chiếu đến đối tượng Part hoạt động như volume của bạn.
Đối với mỗi nhân vật người chơi được tải hoặc hồi sinh trở lại vào trải nghiệm, kịch bản chờ đợi:
- Vật con của nó Animation đối tượng, mà bạn sẽ thêm vào phần tiếp theo.
- Vật thể âm lượng trong không gian làm việc có tên là AnimationDetector .
Khi có bất kỳ thứ gì va chạm với âm lượng, chức năng xử lý sự kiện Touched nhận được tổ tiên đầu tiên là Model , đó là nhân vật nếu đối tượng BasePart va chạm với âm lượng là con cháu của một mô hình nhân vật.Nếu nó là, chức năng sau đó kiểm tra xem liệu Model có phải là nhân vật của người chơi địa phương khôngNếu nó là, chức năng sau đó:
- Đặt giảm bớt thời gian chờ xuống true .
- Chơi và chờ đợi cho đến khi hoạt hình kết thúc.
- Bộ trả lại giảm thời gian trở lại false .
Cài đặt giảm thời gian chờ từ false đến true đến false một lần nữa sau khi hoàn thành phát hoạt hình là một mô hình giảm thời gian chờ ngăn chặn hoạt hình không lặp lại nhiều lần khi người chơi liên tục va chạm với âm lượng.Để biết thêm thông tin về mẫu giảm thời gian này, xem Phát hiện va chạm .
Thêm hoạt hình
Nếu bạn thử nghiệm trải nghiệm của mình ngay bây giờ, TriggerAnimation kịch bản của bạn vẫn sẽ không thể chơi một hoạt hình đáp lại sự va chạm giữa người chơi địa phương.Điều này là bởi vì nó đang chờ một đối tượng con Animation với một tài sản hoạt hình nó có thể tham chiếu, và đối tượng Animation đó hiện không tồn tại.
Để thêm một hoạt hình cho kịch bản địa phương để tham chiếu khi người chơi va chạm với âm lượng:
Trong cửa sổ Explorer , thêm một hoạt họa mới vào TriggerAnimation .
- Chuyển qua TriggerAnimation và nhấp vào nút ⊕.
- Từ menu ngữ cảnh, chèn một sự diễn hoạt .
Chọn đối tượng hoạt hình mới, sau đó trong cửa sổ Tính năng , hãy đặt AnimationID đến animationassetID bạn muốn kích hoạt khi người chơi chạm vào âm lượng.Ví dụ, mẫu tham chiếu Trạm Vũ Trụ Nguy Hiểm để chơi một hoạt hình của một nhân vật rơi ngược lại.
Thử nghiệm trải nghiệm của bạn để đảm bảo rằng hoạt hình của bạn chơi khi người chơi ở gần rò rỉ hơi đầu tiên.