เล่นแอนิเมชั่นตัวละคร

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การเล่นแอนิเมชั่นตัวละคร เป็นส่วนสำคัญของสิ่งที่ทำให้อวตารและตัวละครที่ไม่สามารถเล่นได้ (NPCs) มีความสุข สมจริง และน่าสนใจต่อผู้ชมนอกจากการให้ภาพที่มีภาพลักษณ์แล้ว การแอนิเมชั่นตัวละครยังให้ข้อเสนอแนะแก่ผู้เล่นจากการกระทำของพวกเขา คำแนะนำเกี่ยวกับวิธีการนําทางในสภาพแวดล้อม และข้อมูลสําคัญเกี่ยวกับตัวละครและคนอื่น ๆ ของพวกเขา

โดยใช้ไฟล์ สถานีอวกาศที่เป็นอันตราย.rbxl เป็นข้อมูลอ้างอิง บทแนะนำนี้จะแสดงวิธีการเล่นแอนิเมชั่นตัวละครโดยใช้เทคนิคที่แตกต่างกันสองวิธีรวมถึงคำแนะนำเกี่ยวกับ:

  • แลกเปลี่ยนรหัสอนิเมชั่นตัวละครเริ่มต้นกับอนิเมชั่นที่กําหนดเองของคุณ
  • การเรียกการแสดงภาพในการตอบสนองต่อการกระทําของตัวละครภายในพื้นที่ 3D

หลังจากที่คุณเสร็จสิ้นบทแนะนำนี้คุณจะมีทักษะในการปรับแต่งแอนิเมชั่นสำหรับหลากหลายสถานการณ์การเล่นเกม

เปลี่ยนแอนิเมชั่นเริ่มต้น

ทุกตัวละครที่มีวัตถุเริ่มต้น Humanoid ไม่ว่าจะเป็นอวาตาร์ที่ควบคุมโดยผู้เล่นหรือตัวละครที่ไม่ใช่ผู้เล่น (NPC) รวมถึงชุดของ แอนิเมชั่นเริ่มต้น ที่เล่นเมื่อใดก็ตามที่ตัวละครดำเนินการการกระทำที่เฉพาะเจาะจงในประสบการณ์ เช่น การวิ่ง ปีน และกระโดดRoblox ให้ภาพเคลื่อนไหวเหล่านี้ออกจากกล่องสำหรับประสบการณ์ทุกประเภทโดยไม่ต้องใช้ความพยายามในการเขียนสคริปต์เพิ่มเติม

แอนิเมชั่นการล้มเริ่มต้น
แอนิเมชั่นการว่ายน้ําเริ่มต้น
แอนิเมชั่นการปีนเขาเริ่มต้น

อย่างไรก็ตาม หากแอนิเมชั่นเริ่มต้นเหล่านี้ไม่ตรงกับความต้องการด้านการออกแบบสำหรับสภาพแวดล้อม ความสวยงาม หรือเรื่องราวโดยรวมของโลกของคุณ คุณสามารถแลกเปลี่ยนพวกเขาด้วยแอนิเมชั่นที่กำหนดเองที่ใช้กับผู้เล่นทุกคนที่เข้าร่วมประสบการณ์ของคุณได้เทคนิคการออกแบบเกมนี้สามารถช่วยให้ตัวละครและประสบการณ์ของคุณรู้สึกเป็นส่วนตัว มีส่วนร่วม และสมจริงมากขึ้น

เพื่อสาธิตส่วนต่อไปจะสอนวิธีการแลกเปลี่ยนแอนิเมชั่นการเดินเริ่มต้นด้วยแอนิเมชั่นการเดินที่กําหนดเองจาก สร้างแอนิเมชั่นตัวละครโดยใช้กระบวนการเดียวกันนี้คุณสามารถแลกเปลี่ยนแอนิเมชันเริ่มต้นใดๆ ด้วย ID แอนิเมชันของคุณเอง

แอนิเมชั่นเดินเริ่มต้น
แอนิเมชั่นการเดินที่กำหนดเอง

สร้างสคริปต์

วัตถุของทุกตัวละคร Humanoid รวมถึงวัตถุลูก Animator ที่เก็บการเคลื่อนไหวเริ่มต้นของตัวละครทั้งหมดเพื่อตั้งค่าแอนิเมชั่นเริ่มต้นใดๆ ให้เป็น assetIDs ใหม่คุณต้องสร้างสคริปต์ใน Class.ServiceScriptService เพื่อให้สามารถอ้างอิงและแทนที่ค่าเริ่มต้นของวัตถุ Animator ได้ทันทีที่ผู้เล่นโหลดเข้าสู่ประสบการณ์

เพื่อสร้างสคริปต์ที่จะอ้างอิงไอดีแอนิเมชั่นเริ่มต้น:

  1. ในหน้าต่าง สํารวจ เพิ่มสคริปต์ใหม่ไปยัง 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!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.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 แอนิเมชั่นเดินปกติ:

  1. โทรไปที่สคริปต์แอนิเมชั่นเดินค่าเริ่มต้นแล้วแทนที่ 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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. ทดสอบประสบการณ์ของคุณเพื่อให้แน่ใจว่าการแสดงอนิเมชั่นเดินที่กําหนดเองของคุณจะแทนที่อนิเมชั่นเริ่มต้น

    1. ในแถบเครื่องมือ คลิกปุ่ม เล่น คุณจะเข้าสู่โหมดการทดสอบเล่น Studio

      Play button highlighted in Studio's playtesting options.
    2. เดินไปรอบๆ สถานีอวกาศด้วยอวตารของคุณ

เรียกการแสดงภาพเคลื่อนไหว

ในขณะที่เทคนิคก่อนหน้านี้มุ่งเน้นไปที่การแลกเปลี่ยนแอนิเมชั่นเริ่มต้นที่เล่นโดยอัตโนมัติเมื่อตัวละครดำเนินการการกระทำที่เฉพาะเจาะจงภายในประสบการณ์ คุณสามารถเรียกการแสดงแอนิเมชั่นได้โดยการโปรแกรมตามตัวอักษรในการตอบสนองต่อการกระทำของตัวละครใดๆ ภายในพื้นที่ 3D เช่น หยิบไอเทมหรือได้รับความเสียหายจากอันตราย

ในตัวอย่างนี้เมื่อผู้เล่นสัมผัสแพลตฟอร์มสีทองพวกเขาจะกระตุ้นการเต้นรําตัวละครที่ไม่ใช่ค่าเริ่มต้น

วิธีการเล่นแอนิเมชั่นนี้มีประโยชน์เพราะให้ข้อเสนอแนะทันทีแก่ผู้เล่นเกี่ยวกับวิธีที่พวกเขาควรโต้ตอบกับวัตถุในสภาพแวดล้อมของพวกเขาเพื่อสาธิตส่วนต่อไปแสดงวิธีการเรียกใช้แอนิเมชันเมื่อตัวละครอยู่ใกล้กับการรั่วไหลของไอน้ำอันตรายเป็นวิธีการสอนผู้เล่นอย่างเบา ๆ ในการหลีกเลี่ยงการเดินใกล้กับผนังมากเกินไป

ใส่ระดับเสียง

หนึ่งในวิธีที่พบบ่อยที่สุดในการกระตุ้นพฤติกรรมการเล่นเกมที่ไม่ซ้ำกันคือการใช้ ระดับ หรือพื้นที่ที่มองไม่เห็นภายในพื้นที่ 3D เพื่อตรวจจับเมื่อตัวละครหรือวัตถุโต้ตอบกับพื้นที่เฉพาะของสภาพแวดล้อมเมื่อคุณจับคู่ระดับเสียงกับสคริปต์คุณสามารถใช้การตอบสนองการชนกันของพวกเขาเพื่อกระตุ้นการดำเนินการโดยอัตโนมัติ เช่น ลดสุขภาพของผู้เล่นหรือเล่นแอนิเมชัน

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
ความลับของ Duvall Drive ใช้ระดับเสียงเพื่อเรียกกิจกรรมการเล่นเกมที่เปลี่ยนรูปลักษณ์ภาพของห้อง

เมื่อเพิ่มปริมาณให้กับประสบการณ์ของคุณ เป็นสิ่งสำคัญที่ต้องขยายให้ครอบคลุมพื้นที่ที่คุณต้องการเรียกใช้แอนิเมชันของคุณเท่านั้นหากคุณทำให้ระดับเสียงของคุณเล็กเกินไป ผู้เล่นอาจไม่เคยชนกับพื้นที่เพื่อเล่นแอนิเมชัน; ในทางกลับกันหากคุณทำระดับเสียงของคุณให้ใหญ่เกินไป แอนิเมชันจะเล่นก่อนที่ผู้เล่นจะไปถึงไอเทมหรือพื้นที่ที่สนใจและพวกเขาอาจไม่เข้าใจสิ่งที่พวกเขาทำเพื่อกระตุ้นแอนิเมชัน

เพื่อใส่ระดับเสียงรอบรั่วไหลของไอน้ำที่จะกระตุ้นการแสดงภาพเคลื่อนไหว:

  1. ในหน้าต่าง สํารวจ เพิ่มส่วนบล็อกใหม่
  2. ตำแหน่งและปรับขนาดบล็อกจนกว่าจะครอบคลุมพื้นที่ที่คุณต้องการเรียกใช้แอนิเมชัน
  3. ในหน้าต่าง คุณสมบัติ ให้
    1. ตั้ง ชื่อ เป็น ตัวตรวจจับแอนิเมชัน .

    2. ตั้ง ความโปร่งใส เป็น 1 เพื่อทำให้บล็อกมองไม่เห็น

      An outline of a block is visible around a steam vent to signify the position of the volume.

สร้างสคริปต์

ตอนนี้คุณมีภูมิภาคที่กำหนดไว้สำหรับการเรียกใช้แอนิเมชันของคุณแล้ว ถึงเวลาสร้างสคริปต์ที่ตรวจพบโดยอัตโนมัติเมื่อผู้เล่นชนกับระดับเสียงจากนั้นคุณสามารถฟังเหตุการณ์การชนกันเพื่อเรียกใช้แอนิเมชันใดๆ ที่สอดคล้องกับความต้องการในการเล่นเกมของคุณ

ตัวอย่างเช่น เทคนิคแอนิเมชั่นนี้ใช้ LocalScript แทน Script เพื่อให้ผู้เล่นได้รับความคิดเห็นทันทีเมื่อพวกเขาชนกับระดับเสียงหากเซิร์ฟเวอร์ฟังการชนกันและเล่นแอนิเมชัน อาจมีความล่าช้าระหว่างผู้เล่นสัมผัสระดับเสียงบนไคลเอนต์และดูแอนิเมชันเนื่องจากเวลาการเล่นของแอนิเมชันจากเซิร์ฟเวอร์ไปยังไคลเอนต์

เพื่อสร้างสคริปต์ท้องถิ่นที่จะตรวจพบเมื่อตัวละครของผู้เล่นท้องถิ่นสัมผัสกับระดับเสียง:

  1. ในหน้าต่าง สํารวจ เพิ่มสคริปต์ใหม่ลงใน StarterCharacterScripts การจัดวางนี้ช่วยให้สคริปต์และลูกหลานของมันสามารถโคลนเข้าสู่ตัวละครผู้เล่นเมื่อเข้าร่วม และ เมื่อพวกเขากลับมาสร้างประสบการณ์อีกครั้ง

    1. ขยาย StarterPlayer จากนั้นเลื่อนเมาส์ไปเหนือลูกหลานของมัน StarterCharacterScripts แล้วคลิกปุ่ม ⊕
    2. จากเมนูบริบทใส่ 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 = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

สคริปต์ TriggerAnimation เริ่มต้นโดยรับบริการ Workspace ซึ่งมีวัตถุทั้งหมดที่มีอยู่ในโลก 3Dเป็นสิ่งสำคัญเพราะสคริปต์ต้องอ้างอิงวัตถุ Part ที่กำลังทำหน้าที่เป็นระดับเสียงของคุณ

สำหรับแต่ละตัวละครผู้เล่นที่โหลดหรือเกิดใหม่กลับเข้าสู่ประสบการณ์แล้ว สคริปต์จะรอ:

  • วัตถุลูกของมัน Animation ซึ่งคุณจะเพิ่มในส่วนถัดไป

  • วัตถุของตัวละคร Humanoid และ Animator

  • วัตถุระดับเสียงในพื้นที่ทำงานชื่อ AnimationDetector เมื่อมีอะไรชนกับระดับเสียง ฟังก์ชันตัวจัดการเหตุการณ์ Touched จะได้รับบรรพบุรุษคนแรกที่เป็น Model ซึ่งควรเป็นตัวละครถ้า BasePart ที่ชนกับระดับเสียงเป็นลูกหลานของรูปแบบตัวละครหากเป็นเช่นนั้นฟังก์ชันจะตรวจสอบเพื่อดูว่า คือตัวละครของผู้เล่นท้องถิ่น หากเป็นเช่นนั้นฟังก์ชันจะ:

  • ตั้งค่าการชะลอลงเป็น true

  • เล่นและรอให้แอนิเมชั่นจบลง

  • ตั้งค่า debounce กลับเป็น false

การตั้งค่าการชะลอจาก false ไปยัง true ไปยัง false อีกครั้งหลังจากที่แอนิเมชั่นสิ้นสุดการเล่นเป็นรูปแบบการชะลอที่ป้องกันไม่ให้แอนิเมชั่นเกิดขึ้นซ้ำๆ เนื่องจากผู้เล่นไม่หยุดชนกันอย่างต่อเนื่องสำหรับข้อมูลเพิ่มเติมเกี่ยวกับลายลักษณ์นี้ debounce ดู ตรวจจับการชนกัน

เพิ่มแอนิเมชัน

หากคุณทดสอบประสบการณ์ของคุณในขณะนี้ สคริปต์ TriggerAnimation ของคุณยังไม่สามารถเล่นแอนิเมชันตอบสนองต่อการชนกันระหว่างผู้เล่นท้องถิ่นได้เนื่องจากกําลังรอวัตถุเด็ก Animation ที่มีอนุทินท์แอนิเมชั่นและไม่มีวัตถุนั้น Animation อยู่ในปัจจุบัน

เพื่อเพิ่มแอนิเมชันสำหรับสคริปต์ท้องถิ่นที่อ้างอิงเป็นผู้เล่นชนกับระดับเสียง:

  1. ในหน้าต่าง สํารวจ เพิ่มแอนิเมชั่นใหม่ไปยัง TriggerAnimation 1. เลื่อนเมาส์ไปที่ เปิดใช้งานแอนิเมชัน และคลิกที่ปุ่ม ⊕ 2. จากเมนูบริบทใส่ แอนิเมชั่น 2. เลือกวัตถุแอนิเมชันใหม่แล้วในหน้าต่าง คุณสมบัติ ตั้ง AnimationID เป็น animationID ที่คุณต้องการเรียกใช้เมื่อผู้เล่นแตะปริมาณตัวอย่างเช่น การอ้างอิงตัวอย่างของสถานีอวกาศที่เป็นอันตราย สำหรับการเล่นแอนิเมชั่นของตัวละครที่ล้มไปข้างหลัง

  2. ทดสอบประสบการณ์ของคุณเพื่อให้แน่ใจว่าแอนิเมชั่นของคุณเล่นเมื่อผู้เล่นอยู่ใกล้กับการรั่วไหลครั้งแรก