การเล่นแอนิเมชั่นตัวละคร เป็นส่วนสำคัญของสิ่งที่ทำให้อวตารและตัวละครที่ไม่สามารถเล่นได้ (NPCs) มีความสุข สมจริง และน่าสนใจต่อผู้ชมนอกจากการให้ภาพที่มีภาพลักษณ์แล้ว การแอนิเมชั่นตัวละครยังให้ข้อเสนอแนะแก่ผู้เล่นจากการกระทำของพวกเขา คำแนะนำเกี่ยวกับวิธีการนําทางในสภาพแวดล้อม และข้อมูลสําคัญเกี่ยวกับตัวละครและคนอื่น ๆ ของพวกเขา
โดยใช้ไฟล์ สถานีอวกาศที่เป็นอันตราย.rbxl เป็นข้อมูลอ้างอิง บทแนะนำนี้จะแสดงวิธีการเล่นแอนิเมชั่นตัวละครโดยใช้เทคนิคที่แตกต่างกันสองวิธีรวมถึงคำแนะนำเกี่ยวกับ:
- แลกเปลี่ยนรหัสอนิเมชั่นตัวละครเริ่มต้นกับอนิเมชั่นที่กําหนดเองของคุณ
- การเรียกการแสดงภาพในการตอบสนองต่อการกระทําของตัวละครภายในพื้นที่ 3D
หลังจากที่คุณเสร็จสิ้นบทแนะนำนี้คุณจะมีทักษะในการปรับแต่งแอนิเมชั่นสำหรับหลากหลายสถานการณ์การเล่นเกม
เปลี่ยนแอนิเมชั่นเริ่มต้น
ทุกตัวละครที่มีวัตถุเริ่มต้น Humanoid ไม่ว่าจะเป็นอวาตาร์ที่ควบคุมโดยผู้เล่นหรือตัวละครที่ไม่ใช่ผู้เล่น (NPC) รวมถึงชุดของ แอนิเมชั่นเริ่มต้น ที่เล่นเมื่อใดก็ตามที่ตัวละครดำเนินการการกระทำที่เฉพาะเจาะจงในประสบการณ์ เช่น การวิ่ง ปีน และกระโดดRoblox ให้ภาพเคลื่อนไหวเหล่านี้ออกจากกล่องสำหรับประสบการณ์ทุกประเภทโดยไม่ต้องใช้ความพยายามในการเขียนสคริปต์เพิ่มเติม
อย่างไรก็ตาม หากแอนิเมชั่นเริ่มต้นเหล่านี้ไม่ตรงกับความต้องการด้านการออกแบบสำหรับสภาพแวดล้อม ความสวยงาม หรือเรื่องราวโดยรวมของโลกของคุณ คุณสามารถแลกเปลี่ยนพวกเขาด้วยแอนิเมชั่นที่กำหนดเองที่ใช้กับผู้เล่นทุกคนที่เข้าร่วมประสบการณ์ของคุณได้เทคนิคการออกแบบเกมนี้สามารถช่วยให้ตัวละครและประสบการณ์ของคุณรู้สึกเป็นส่วนตัว มีส่วนร่วม และสมจริงมากขึ้น
เพื่อสาธิตส่วนต่อไปจะสอนวิธีการแลกเปลี่ยนแอนิเมชั่นการเดินเริ่มต้นด้วยแอนิเมชั่นการเดินที่กําหนดเองจาก สร้างแอนิเมชั่นตัวละครโดยใช้กระบวนการเดียวกันนี้คุณสามารถแลกเปลี่ยนแอนิเมชันเริ่มต้นใดๆ ด้วย ID แอนิเมชันของคุณเอง
สร้างสคริปต์
วัตถุของทุกตัวละคร Humanoid รวมถึงวัตถุลูก Animator ที่เก็บการเคลื่อนไหวเริ่มต้นของตัวละครทั้งหมดเพื่อตั้งค่าแอนิเมชั่นเริ่มต้นใดๆ ให้เป็น assetIDs ใหม่คุณต้องสร้างสคริปต์ใน Class.ServiceScriptService เพื่อให้สามารถอ้างอิงและแทนที่ค่าเริ่มต้นของวัตถุ Animator ได้ทันทีที่ผู้เล่นโหลดเข้าสู่ประสบการณ์
เพื่อสร้างสคริปต์ที่จะอ้างอิงไอดีแอนิเมชั่นเริ่มต้น:
ในหน้าต่าง สํารวจ เพิ่มสคริปต์ใหม่ไปยัง ServerScriptService 1. เลื่อนเมาส์ไปที่ ServerScriptService และคลิกที่ปุ่ม ⊕ 2. จากเมนูบริบทใส่ สคริปต์ 2. ในสคริปต์ใหม่ให้วางโค้ดต่อไปนี้:
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)
สคริปต์ ResetDefaultAnimations เริ่มต้นโดยรับบริการ Players ซึ่งมีวัตถุทั้งหมด Player สำหรับผู้เล่นที่เชื่อมต่อกับเซิร์ฟเวอร์เมื่อตัวละครของผู้เล่นแต่ละตัวโหลดเข้าสู่ประสบการณ์แล้ว ฟังก์ชัน onCharacterAdded จะรอจนกว่าจะตรวจพบวัตถุ Humanoid และ Animator ของตัวละคร
เมื่อตรวจพบวัตถุ Animator ครั้งแรก สคริปต์จะพิมพ์ "Animator found!" เพื่อแจ้งให้คุณทราบว่าสคริปต์ทำงานตามที่ตั้งใจไว้
แทนที่ assetID
ตอนนี้คุณรู้แล้วว่าสคริปต์ของคุณสามารถตรวจพบได้เมื่อผู้เล่นโหลดและเชื่อมต่อกับเซิร์ฟเวอร์คุณสามารถแก้ไขสคริปต์เพื่ออ้างอิงถึงรหัสแอนิเมชันที่คุณต้องการแลกเปลี่ยนกับแอนิเมชันที่กําหนดเองของคุณได้
ตารางต่อไปนี้มีการแอนิเมชั่นตัวละครเริ่มต้นทั้งหมดที่คุณสามารถเรียกและแทนที่ได้ภายในวัตถุ Animatorโปรดทราบว่าไม่ได้มีการใช้งานมีสองรูปแบบที่คุณสามารถโปรแกรมให้เล่นบ่อยหรือน้อยลง
การกระทําของตัวละคร | อ้างอิงสคริปต์แอนิเมชัน |
ดำเนินการ | animateScript.run.RunAnim.AnimationId |
เดิน | animateScript.walk.WalkAnim.AnimationId |
กระโดด | animateScript.jump.JumpAnim.AnimationId |
ไม่ได้ใช้งาน | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
ตก | animateScript.fall.FallAnim.AnimationId |
ว่ายน้ำ | animateScript.swim.Swim.AnimationId |
ว่ายน้ำ (ไม่ได้ใช้งาน) | animateScript.swimidle.SwimIdle.AnimationId |
ปีน | animateScript.climb.ClimbAnim.AnimationId |
เพื่อแทนที่ ID แอนิเมชั่นเดินปกติ:
โทรไปที่สคริปต์แอนิเมชั่นเดินค่าเริ่มต้นแล้วแทนที่ assetID ด้วย assetID แอนิเมชั่นที่กําหนดเองของคุณตัวอย่างโค้ดต่อไปนี้อ้างอิงถึงแอนิเมชั่นวงจรเดินจาก สร้างแอนิเมชั่นตัวละคร
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)ทดสอบประสบการณ์ของคุณเพื่อให้แน่ใจว่าการแสดงอนิเมชั่นเดินที่กําหนดเองของคุณจะแทนที่อนิเมชั่นเริ่มต้น
ในแถบเครื่องมือ คลิกปุ่ม เล่น คุณจะเข้าสู่โหมดการทดสอบเล่น Studio
เดินไปรอบๆ สถานีอวกาศด้วยอวตารของคุณ
เรียกการแสดงภาพเคลื่อนไหว
ในขณะที่เทคนิคก่อนหน้านี้มุ่งเน้นไปที่การแลกเปลี่ยนแอนิเมชั่นเริ่มต้นที่เล่นโดยอัตโนมัติเมื่อตัวละครดำเนินการการกระทำที่เฉพาะเจาะจงภายในประสบการณ์ คุณสามารถเรียกการแสดงแอนิเมชั่นได้โดยการโปรแกรมตามตัวอักษรในการตอบสนองต่อการกระทำของตัวละครใดๆ ภายในพื้นที่ 3D เช่น หยิบไอเทมหรือได้รับความเสียหายจากอันตราย
วิธีการเล่นแอนิเมชั่นนี้มีประโยชน์เพราะให้ข้อเสนอแนะทันทีแก่ผู้เล่นเกี่ยวกับวิธีที่พวกเขาควรโต้ตอบกับวัตถุในสภาพแวดล้อมของพวกเขาเพื่อสาธิตส่วนต่อไปแสดงวิธีการเรียกใช้แอนิเมชันเมื่อตัวละครอยู่ใกล้กับการรั่วไหลของไอน้ำอันตรายเป็นวิธีการสอนผู้เล่นอย่างเบา ๆ ในการหลีกเลี่ยงการเดินใกล้กับผนังมากเกินไป
ใส่ระดับเสียง
หนึ่งในวิธีที่พบบ่อยที่สุดในการกระตุ้นพฤติกรรมการเล่นเกมที่ไม่ซ้ำกันคือการใช้ ระดับ หรือพื้นที่ที่มองไม่เห็นภายในพื้นที่ 3D เพื่อตรวจจับเมื่อตัวละครหรือวัตถุโต้ตอบกับพื้นที่เฉพาะของสภาพแวดล้อมเมื่อคุณจับคู่ระดับเสียงกับสคริปต์คุณสามารถใช้การตอบสนองการชนกันของพวกเขาเพื่อกระตุ้นการดำเนินการโดยอัตโนมัติ เช่น ลดสุขภาพของผู้เล่นหรือเล่นแอนิเมชัน

เมื่อเพิ่มปริมาณให้กับประสบการณ์ของคุณ เป็นสิ่งสำคัญที่ต้องขยายให้ครอบคลุมพื้นที่ที่คุณต้องการเรียกใช้แอนิเมชันของคุณเท่านั้นหากคุณทำให้ระดับเสียงของคุณเล็กเกินไป ผู้เล่นอาจไม่เคยชนกับพื้นที่เพื่อเล่นแอนิเมชัน; ในทางกลับกันหากคุณทำระดับเสียงของคุณให้ใหญ่เกินไป แอนิเมชันจะเล่นก่อนที่ผู้เล่นจะไปถึงไอเทมหรือพื้นที่ที่สนใจและพวกเขาอาจไม่เข้าใจสิ่งที่พวกเขาทำเพื่อกระตุ้นแอนิเมชัน
เพื่อใส่ระดับเสียงรอบรั่วไหลของไอน้ำที่จะกระตุ้นการแสดงภาพเคลื่อนไหว:
- ในหน้าต่าง สํารวจ เพิ่มส่วนบล็อกใหม่
- ตำแหน่งและปรับขนาดบล็อกจนกว่าจะครอบคลุมพื้นที่ที่คุณต้องการเรียกใช้แอนิเมชัน
- ในหน้าต่าง คุณสมบัติ ให้
ตั้ง ชื่อ เป็น ตัวตรวจจับแอนิเมชัน .
ตั้ง ความโปร่งใส เป็น 1 เพื่อทำให้บล็อกมองไม่เห็น
สร้างสคริปต์
ตอนนี้คุณมีภูมิภาคที่กำหนดไว้สำหรับการเรียกใช้แอนิเมชันของคุณแล้ว ถึงเวลาสร้างสคริปต์ที่ตรวจพบโดยอัตโนมัติเมื่อผู้เล่นชนกับระดับเสียงจากนั้นคุณสามารถฟังเหตุการณ์การชนกันเพื่อเรียกใช้แอนิเมชันใดๆ ที่สอดคล้องกับความต้องการในการเล่นเกมของคุณ
ตัวอย่างเช่น เทคนิคแอนิเมชั่นนี้ใช้ LocalScript แทน Script เพื่อให้ผู้เล่นได้รับความคิดเห็นทันทีเมื่อพวกเขาชนกับระดับเสียงหากเซิร์ฟเวอร์ฟังการชนกันและเล่นแอนิเมชัน อาจมีความล่าช้าระหว่างผู้เล่นสัมผัสระดับเสียงบนไคลเอนต์และดูแอนิเมชันเนื่องจากเวลาการเล่นของแอนิเมชันจากเซิร์ฟเวอร์ไปยังไคลเอนต์
เพื่อสร้างสคริปต์ท้องถิ่นที่จะตรวจพบเมื่อตัวละครของผู้เล่นท้องถิ่นสัมผัสกับระดับเสียง:
ในหน้าต่าง สํารวจ เพิ่มสคริปต์ใหม่ลงใน StarterCharacterScripts การจัดวางนี้ช่วยให้สคริปต์และลูกหลานของมันสามารถโคลนเข้าสู่ตัวละครผู้เล่นเมื่อเข้าร่วม และ เมื่อพวกเขากลับมาสร้างประสบการณ์อีกครั้ง
- ขยาย StarterPlayer จากนั้นเลื่อนเมาส์ไปเหนือลูกหลานของมัน StarterCharacterScripts แล้วคลิกปุ่ม ⊕
- จากเมนูบริบทใส่ LocalScript และเปลี่ยนชื่อเป็น TriggerAnimation 2. ในสคริปต์ใหม่ให้วางโค้ดต่อไปนี้:
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)
สคริปต์ TriggerAnimation เริ่มต้นโดยรับบริการ Workspace ซึ่งมีวัตถุทั้งหมดที่มีอยู่ในโลก 3Dเป็นสิ่งสำคัญเพราะสคริปต์ต้องอ้างอิงวัตถุ Part ที่กำลังทำหน้าที่เป็นระดับเสียงของคุณ
สำหรับแต่ละตัวละครผู้เล่นที่โหลดหรือเกิดใหม่กลับเข้าสู่ประสบการณ์แล้ว สคริปต์จะรอ:
วัตถุลูกของมัน Animation ซึ่งคุณจะเพิ่มในส่วนถัดไป
วัตถุระดับเสียงในพื้นที่ทำงานชื่อ AnimationDetector เมื่อมีอะไรชนกับระดับเสียง ฟังก์ชันตัวจัดการเหตุการณ์ Touched จะได้รับบรรพบุรุษคนแรกที่เป็น Model ซึ่งควรเป็นตัวละครถ้า BasePart ที่ชนกับระดับเสียงเป็นลูกหลานของรูปแบบตัวละครหากเป็นเช่นนั้นฟังก์ชันจะตรวจสอบเพื่อดูว่า คือตัวละครของผู้เล่นท้องถิ่น หากเป็นเช่นนั้นฟังก์ชันจะ:
ตั้งค่าการชะลอลงเป็น true
เล่นและรอให้แอนิเมชั่นจบลง
ตั้งค่า debounce กลับเป็น false
การตั้งค่าการชะลอจาก false ไปยัง true ไปยัง false อีกครั้งหลังจากที่แอนิเมชั่นสิ้นสุดการเล่นเป็นรูปแบบการชะลอที่ป้องกันไม่ให้แอนิเมชั่นเกิดขึ้นซ้ำๆ เนื่องจากผู้เล่นไม่หยุดชนกันอย่างต่อเนื่องสำหรับข้อมูลเพิ่มเติมเกี่ยวกับลายลักษณ์นี้ debounce ดู ตรวจจับการชนกัน
เพิ่มแอนิเมชัน
หากคุณทดสอบประสบการณ์ของคุณในขณะนี้ สคริปต์ TriggerAnimation ของคุณยังไม่สามารถเล่นแอนิเมชันตอบสนองต่อการชนกันระหว่างผู้เล่นท้องถิ่นได้เนื่องจากกําลังรอวัตถุเด็ก Animation ที่มีอนุทินท์แอนิเมชั่นและไม่มีวัตถุนั้น Animation อยู่ในปัจจุบัน
เพื่อเพิ่มแอนิเมชันสำหรับสคริปต์ท้องถิ่นที่อ้างอิงเป็นผู้เล่นชนกับระดับเสียง:
ในหน้าต่าง สํารวจ เพิ่มแอนิเมชั่นใหม่ไปยัง TriggerAnimation 1. เลื่อนเมาส์ไปที่ เปิดใช้งานแอนิเมชัน และคลิกที่ปุ่ม ⊕ 2. จากเมนูบริบทใส่ แอนิเมชั่น 2. เลือกวัตถุแอนิเมชันใหม่แล้วในหน้าต่าง คุณสมบัติ ตั้ง AnimationID เป็น animationID ที่คุณต้องการเรียกใช้เมื่อผู้เล่นแตะปริมาณตัวอย่างเช่น การอ้างอิงตัวอย่างของสถานีอวกาศที่เป็นอันตราย สำหรับการเล่นแอนิเมชั่นของตัวละครที่ล้มไปข้างหลัง
ทดสอบประสบการณ์ของคุณเพื่อให้แน่ใจว่าแอนิเมชั่นของคุณเล่นเมื่อผู้เล่นอยู่ใกล้กับการรั่วไหลครั้งแรก