ผู้เล่นสามารถรับข้อเสนอแนะว่าการกระทําของพวกเขากําลังทําอะไรบางอย่างด้วยอนิเมชันหรือไม่ นี่อาจเป็นการเขย่าต้นไม้เมื่อถูกกด หรือสัตว์เลี้ยงที่กระโดดอย่างมีความสุขเมื่
ทวีนินงกับอนิเมชัน
วิธีหนึ่งในการอนิเมชันวัตถุคือการใช้วัยรุ่น วัยรุ่น tween คือกระบวนการเปลี่ยนค่าเริ่มต้นเป็นค่าสิ้นสุดในระยะเวลาที่กำหนด วัยรุ่นสามารถใช้เพื่อเปลี่ยนสมบัติ
การตั้งค่าโครงการ
สำหรับโครงการนี้, เทวน์จะย้ายวัตถุจากตำแหน่งเริ่มต้นไปยังตำแหน่งเป้าหมาย
กำหนดส่วนที่คุณจะแอนิเมชัน ในตัวอย่างด้านล่างนี้, 1 คือปุ่ม, และ 2 คือผนัง
ในส่วนที่จะเคลื่อนที่ เพิ่ม ClickDetector และสคริปต์ที่มีชื่อว่า TweenMove อย่าเปลี่ยนชื่อ ClickDetector
เปิดสคริปต์ TweenMove แล้วคัดลอกและวางสคริปต์ด้านล่าง
-- วิ่งตรงกลับไปยังอีกฝั่งของอาวุธตามแกนที่เลือก-- ปุ่มมีสถานะเปิด/ปิดซึ่งเคลื่อนย้ายชิ้นส่วนไปข้างหน้าหรือข้างหลังlocal TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- กำหนดทิศทางปุ่ม; -1 หมายถึงการกดลง, 1 หมายถึงการป๊อปออกlocal inTween = false-- แปรที่ปรับแต่งได้local TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- แปรงค่า Tweenlocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- เวลาEnum.EasingStyle.Quad, -- EasingStyleEnum.EasingDirection.Out -- เอาทิศทางออก)local function buttonPress()-- หากปุ่มกำลังเปลี่ยนแปลง ป้องกันมันจากการใช้งานอีกครั้งif inTween == true thenreturnend-- คํานวณ CFrame ใหม่สําหรับตําแหน่งปุ่มlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- สร้าง tween และเล่นlocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- เมื่อเสร็จสิ้นการทวีคูณให้ปุ่มใช้งานได้อีกครั้งtweenButton.Completed:Connect(function()inTween = false-- ย้อนสถานะปุ่มbuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)ทดสอบและคลิกที่วัตถุ ในระหว่างการทดสอบ คุณอาจสังเกตเห็นว่าวัตถุเคลื่อนทิศทางหรือระยะทางผิด สิ่งนี้สามารถปรับแต่งในส่วนต่อไป
ปรับปรุงการเคลื่อนไหว
เมื่อเรื่องราวถูกเพิ่มเข้ามาแล้ว คุณสามารถปรับแต่งมันเพื่อเหมาะกับความต้องการของเกมของคุณ ย้อนกลับหรือขึ้นและลง
เปลี่ยนตำแหน่ง
จำไว้ว่าวัยรุ่นเริ่มต้นจากมูลค่าเริ่มต้นไปยังมูลค่าเป้าหมาย สคริปต์นี้ใช้ CFrames เพื่อย้ายปุ่มในทิศทางที่เกี่ยวข้องกับตำแหน่งปัจจุบันของมัน ทิศทางนี้จะได้รับการควบคุมใ
ในแถวนั้น เราสร้าง CFrame ใหม่โดยใช้ X, Y และ Z ติดต่อกัน ในตัวอย่างนี้ ปุ่มเคลื่อนที่เมื่อเป็นสัดส่วนกับแกน Y ของมัน
-- คํานวณ CFrame ใหม่สําหรับตําแหน่งปุ่มlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
เพื่อให้ปุ่มเคลื่อนที่ในทิศทางที่แตกต่างกัน เพียงแค่ แทนที่หนึ่งในของต้องการด้วยสาย: TWEEN_MOVE_DISTANCE * buttonState ตั้งค่าความลึกของทุกของต้องการไว้ที่ 0
เช่นเดียวกัน สายนี้จะย้ายมันไปยังแกน X ของมันแทน
-- คํานวณ CFrame ใหม่สําหรับตําแหน่งปุ่มlocal offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
การปรับเวลาและระยะทาง
สคริปต์นี้รวมถึงแปรต่อไปนี้ที่ส่งผลต่อการเคลื่อนที่ของ tween ชื่อเรื่องเหล่านี้เขียนขึ้นโดยเฉพาะสำหรับสคริปต์นี้เพื่อให้มันถูกปรับแก้
ลองเปลี่ยนค่าของตัวแปรหนึ่งด้านล่าง:
- ตรวจสอบ 11 - TWEEN_TIME : เวลาในวินาทีที่ใช้สำหรับการเกิดขึ้นของ tween
- สาย 12 - TWEEN_MOVE_DISTANCE : ระยะที่ปุ่มเคลื่อนที่ใน studs
การปรับแต่งคุณสมบัติอื่น ๆ
ส่วนใหญ่ของโปรไฟล์ที่มีข้อมูลชุดตัวเลขสามารถปรับแต่งได้ ส่วนนี้รวมถึงโปรไฟล์ทั่วไปบางอย่างเช่นการหมุนที่สามารถใช้เพื่อนำความคิดเห็นของผู้เล่นเข้ามาในเกมของคุณ โปรดทราบว่าคุณยังสามา
สำหรับรายการโปรพีเรียบร้อยให้ดูที่หน้า TweenService API
หมุน
สำหรับการหมุน ให้ผสานการเปลี่ยนแปลงและ CFrames โดยใช้ Vector3 เท่านั้น เมื่อสัตว์เลี้ยงหรือเหรียญถูกหยิบขึ้น การหมุนทวีนสามารถใช้เพื่อทำให้สัตว์เลี้ยงขยับได้เมื่อสัตว์เลี้ยงหรือเหรียญถูกหยิบขึ้น
ในตัวอย่างสคริปต์ต่อไป, ตำแหน่งและการหมุนของสัตว์เลี้ยงถูกปรับเปลี่ยนเมื่อคลิกเพื่อแสดงว่ามีความสุขเมื่ออยู่กับสัตว์เลี้ยง
รหัสด้านล่างจะหมุนวัตถุตามจำนวนองศาใน TWEEN_ROT_ANGLES
-- ใช้ tween เพื่อทำให้วัตถุหมุนขึ้นและตีกลับ
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- แปรที่ปรับแต่งได้
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- แปรงค่า Tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- เวลา
Enum.EasingStyle.Quad, -- EasingStyle
Enum.EasingDirection.Out, -- เอาทิศทางออก
1, -- RepeatCount (เมื่อน้อยกว่า zero จะทำซ้ำได้อย่างไม่มีที่สิ้นสุด)
true -- ย้อนกลับ (tween จะย้อนกลับเมื่อไปถึงเป้าหมายของมัน)
)
local function activateAction()
-- หากวัตถุกำลังเริ่มต้นขึ้น หยุดให้มันเริ่มต้นอีกครั้ง
if inTween == true then
return
end
-- คํานวณ CFrame ใหม่สําหรับตําแหน่งและการหมุนของวัตถุ
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE, 0)
local rotatedCFrame = CFrame.Angles(math.rad(TWEEN_ROT_ANGLES), 0, 0)
offsetCFrame = offsetCFrame:ToWorldSpace(rotatedCFrame)
local newCFrame = partToTween.CFrame:ToWorldSpace(offsetCFrame)
-- สร้าง tween และเล่น
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- เมื่อเสร็จสิ้นการปรับแต่งตัวอักษรใหม่
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)
การเคลื่อน
การเปลี่ยนขนาดของวัตถุในเกมยังสามารถแสดงได้ว่าผู้เล่นได้โต้ตอบกับพวกเขา เช่น การเก็บของเช่นกันสุขภาพหรืออัญมณีสามารถหดตัวเมื่อสัมผัสได้ เพื่อเพิ่มขนาดของชิ้นส่วน ให้เปลี่ยนเ
-- ปรับขนาดของชิ้นส่วนเมื่อสัมผัสแล้วทำลาย
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- แปรที่ปรับแต่งได้
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- แปรงค่า Tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- เวลา
Enum.EasingStyle.Exponential, -- EasingStyle
Enum.EasingDirection.Out -- เอาทิศทางออก
)
local function onPartTouch(otherPart)
-- หากวัตถุกำลังเริ่มต้นขึ้น หยุดให้มันเริ่มต้นอีกครั้ง
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- ป้องกันการชนกันเพิ่มเติมบนวัตถุเมื่อมันถูกหยิบ
partToScale.CanCollide = false
-- สร้าง tween และเล่น
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- เมื่อเสร็จสิ้นการทวีคูณสิ่งของจะทำลายวัตถุ
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)
เปลี่ยนสี
ชิ้นส่วนสามารถเปลี่ยนสีโดยปรับแต่งด้วยมูลค่า Color3 อินสแตนซ์ศัตรูหรือวัตถุที่ทำลายได้สามารถแปลงสีเพื่อให้ข้อเสนอแนะว่าพวกเขาถูกกดหรือคลิก
-- เปลี่ยนสีของวัตถุเมื่อคลิกและทำลายหลังจาก 3 คลิก
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- แปรแต่งได้
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- แปรงค่า Tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- เวลา
Enum.EasingStyle.Exponential, -- EasingStyle
Enum.EasingDirection.InOut, -- เอาทิศทางออก
0, -- RepeatCount (เมื่อน้อยกว่า zero จะทำซ้ำได้อย่างไม่มีที่สิ้นสุด)
true -- ย้อนกลับ (tween จะย้อนกลับเมื่อไปถึงเป้าหมายของมัน)
)
local function activateAction()
-- หากวัตถุกำลังเริ่มต้นขึ้น หยุดให้มันเริ่มต้นอีกครั้ง
if inTween == true then
return
end
-- สร้าง tween และเล่น
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- เมื่อเสร็จสิ้นการปรับแต่งตัวอักษรใหม่
tweenObject.Completed:Connect(function()
inTween = false
-- เพิ่มจำนวนการโจมตี
hitCount += 1
-- หลังจาก 3 การโจมตี ทำลายวัตถุ
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)
ในขณะที่สคริปต์นี้ใช้ส่วนปกติเพื่อเปลี่ยนสี แต่ยังเป็นไปได้ที่จะใช้สิ่งนี้ใน MeshParts ด้วยผลิตภัณฑ์ที่ใช้เท็กส์เตอร์ MeshParts มักจะนำเข้า 3D โมเดล แทนที่จะเป็นส่วนผลิตโดยตรงใน Roblox Studio
หากคุณกำลังทำงานกับ MeshPart ที่มีข้อความสมบูรณ์ข้างต้น กำลังติดตาม:
ใช้ SpecialMesh แทน MeshPart เนื่อหากเนื้อผ้า MeshPart จะถูกเปลี่ยนสีโดยสคริปต์
เปลี่ยนสคริปต์เพื่อแก้ไขสีของเนื้อหุ้มพิเศษแทนสีของคุณสมบัติ
ตัวอย่างโครงการ
ดูตัวอย่างสคริปทั้งหมดในสถานที่นี้ที่ไม่มีล็อคสคริปต์ รวมทั้งสคริปทั้งหมดที่สามารถปรับแก้ได้