ต่อไปนี้คือรายการแท็กทั่วไปใน MicroProfiler หมวดหมู่การเข้าใจแท็กเหล่านี้สามารถช่วยให้คุณระบุโค้ดที่น่าประหลาดใจในประสบการณ์ของคุณ ตารางนี้ประกอบด้วยแท็กเลขออ้างอิงคำอธิบายและคำแนะน
AI / การนำทาง
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
ราสเตอร์ไทล์ | อัปเดตรายละเอียดการนำทางที่ต้องการสำหรับคำขอการค้นหาเส้นทาง โดยปกติจะติดตามโดยคำนวณเส้นทางซึ่งต้องการให้รายละเอียดเหล่านี้อยู่ในระดับปัจจุบัน ติดตาม NavigationJob/pre処理บนเส้นทางหลัก | ลดจำนวนการหาเส้นทางที่ไม่ถูกต้องเนื่องจากสาเหตุนี้ทำให้เส้นทางเหล่านี้ต้องใช้การคำนวณใหม่ สิ่งนี้เกิดขึ้นเนื่องจากชิ้นส่วนที่ไม่นำทางได้ |
คํานวณเส้นทาง | คํานวณเส้นทางโดยปกติหลังจาก rasterizeTile | ลดจำนวนและโลกของการโทร ComputePath ลองใช้เส้นทางสำหรับตัวแทนหลายตัวหากพวกเขาคาดว่าจะเริ่ม/สิ้นจากสถานที่ที่คล้ายกัน |
การประมวลผลล่วงหน้า/รับ Primitives ที่ซ้อนกัน | รวบรวมเหลี่ยมเเห่งโลกสำหรับแต่ละเเท่งวางทางและกำหนดการทำงานเหลี่ยมเเบบรายละเอียดเพื่อดำเนินการโดยทางเเท่งวางทาง | ลดจำนวนชิ้นส่วน |
อนิเมชั่น
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
การจำลอง/เกมStepped | การประมวลผลวัตถุเฉพาะของเกมเช่น Humanoids ، Animations และการเรียกคืนการเต้นของหัวใจ | |
การจำลอง/เกมStepped/StepLegacy | Humanoid เปลี่ยนแปลงสถานะและ movement.Called ขั้นตอน Humanoid บนเซิร์ฟเวอร์ตอนนี้ (เวอร์ชันพาร์เลล) | ปิดหรือลด Humanoid สถานะบน NPC, หากคุณมีพวกเขา ปิดใช้งานลดการโทรกลับไปยังสถานะเปลี่ยนแปลงเช่น Humanoid.Died หรื |
การจำลอง/การเล่น/การข้ามขั้นตอน | Animators จะก้าวไปข้างหน้าในขณะที่เล่นอนิเมชั่น | ลดจำนวน Animators หรือข้อต่ออนิเมชันที่มีอยู่ให้น้อยลงเพื่อลดภาระงานของขั้นตอนนี้ ลดจำนวนของเหตุการณ์การโทรหาเป็นอนิเมชันเช่น AnimationTrack.KeyframeReached |
Simulation/gameStepped/RunService | รุ่นฟังก์ชันที่เชื่อมต่อกับเหตุการณ์ RunService.Stepped | ลดจำนวนหรือ workload ของฟังก์ชันที่เกี่ยวข้องกับเหตุการณ์นี้ พิจารณาการลดความแลคหรือการแทนที่ค่าคำนวณที่แพง พิจารณาการแพร่กระจายการคำนวณไปยังหลายเฟรม |
เสียง
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
เสียง | ประมวลผลเสียง: สถานที่, ผล, ปริมาณ, ฯลฯ | |
แท็กผู้พัฒนา_เสียง | เสียงในหน่วยความจำ: เสียงสั้น ๆ ที่เล็กพอที่จะเข้าสู่หน่วยความจำ โดยปกติจะเป็น fx สั้น ๆ เดี่ยว ไม่ใช่ดนตรีในรูปแบบยาว | ใช้เสียงสั้น ๆ |
DeveloperTag_StreamingSounds | stream/StreamingSounds: เสียงเหล่านี้เป็นเสียงที่ใหญ่ขึ้นที่ได้รับการสตรีมจากดิสก์ โดยทั่วไปเป็นไฟล์เพลงรูปตัวยาว | ใช้เสียงที่ยืดเยื้อนน้อยลง |
เครือข่าย
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
Net Packet รับ | รับพับเก็ตเครือข่าย หากมีจำนวนมากของวัตถุหรือเหตุการณ์ที่ถูกเลียนแบบ ขั้นตอนนี้ใช้เวลานานขึ้น | เรียกอีเว้นท์หรือวัตถุน้อยลง |
Replicator/ProcessPackets | ประมวลผลเนื้อหาของแพ็คเคจเครือข่าย เช่น การเคลื่อนไหว การเรียกอีเว้นท์ และการเปลี่ยนแปลงสมบัติสินค้า | ลดจำนวนหรือขนาดของวัตถุที่เลียนแบบหรือทำเช่นนี้ในขั้นตอนเพิ่มเติม อาจเพิ่มขึ้นหากขนาดแผนที่เพิ่มขึ้นเนื่องจากแผนที่ขนาดใหญ่มักจะมีกิจกรรมมากขึ้น |
กระจายความถี่และดำเนินการส่งสัญญาณผู้ประกอบการและผู้ส่งสัญญาณสัมพันธ์และสัมพันธ์ผู้ใช้ | ส่งข้อมูลเกี่ยวกับกิจกรรมในประสบการณ์ | ลดจำนวนวัตถุที่เคลื่อนที่และ/หรือแตะต้อง ดูต่อไปในส่วนต่อไป |
กำหนดความเร็วและประสานผู้ส่ง/รับงาน | ส่งภาคส่วนที่เกี่ยวข้องให้กับลูกค้าที่เฉพาะเจาะจงในคุณสมบัติ "การสตรีม" | ลดรัศมีการจัดการสตรีมขั้นต่ำและเป้าหมาย |
กระจายความกว้างขวางและส่งข้อมูลผู้ส่ง | ส่งการเปลี่ยนแปลงสถานะของโปรไฟล์ การเหยียวเหลวของอีเวนต์ และการเปลี่ยนแปลงสถานะของมนุษย์ | ลดจำนวนการเปลี่ยนแปลงที่เลียนแบบไปยังโมเดลข้อมูล |
Replicator ส่ง Cloud | ส่งข้อมูลพื้นที่ไปยังลูกค้า | ลดจำนวนหรือขนาดการเปลี่ยนแปลงของพื้นที่ |
โมเดลความสำเร็จ Mega Job | เฉพาะเซิร์ฟเวอร์: ความสมบูรณ์เป็นแนวคิดภายใน เมื่อโมเดลถูกส่งออกอย่างสมบูรณ์ เหตุการณ์ความสมบูรณ์ของโมเดลจะถูกส่ง | เพิ่มหรือลบริ้อนสถานที่น้อยลง |
คําสั่ง DeserializePacket | การประมวลผลเครือข่ายระดับต่ำ เตรียมพร้อมสำหรับ Replicator ProcessPackets | ส่งการปรับปรุงน้อยลง |
การเรนเดอร์
ฉลาก | คำอธิบาย | โน้ตประสิทธิภาพ |
---|---|---|
เตรียม | ข้อมูลจะถูกรวบรวมจากกระทู้หลักและปรับปรุงโครงสร้างข้อมูลที่หลากหลายที่ใช้สำหรับการเรนเดอร์ นี่บล็อกซิมูเลชันธรรมดาดังนั้นจึงควรเล็กที่สุด | ดูฉลากเตรียมด้านล่าง |
เตรียมพร้อม/Pass3dAdorn | เรนเดอร์ตกแต่งวัตถุต่างๆ เช่นเมื่อเรนเดอร์ข้อความข้างบนของวัตถุ ขั้นตอนนี้อาจรวมถึงการโคลนเพื่อกำหนดว่าวัตถุเหล่านี้มองเห็นได้หรือไม่ | ลดจำนวนวัตถุที่มีอยู่เป็นระยะเวลานานเช่น BillboardGuis ชื่อ/ฉลากชื่อสุขภาพต่างๆ เป็นต้น |
เตรียม/Pass2d | พร้อมให้ใช้งาน 2D UI เรนเดอร์ (ทั้งผู้เล่นและ UI ของ Roblox) | ลดจำนวนหรือความซับซ้อนของรูปแบบ UI |
เตรียม/ปรับปรุงเตรียม/ปรับปรุงโครงสร้างที่ไม่ถูกต้อง | อัปเดตรายการที่มีสมบัติส่วนที่เปลี่ยนแปลงหรือเพิ่ม | ลดจำนวนการเปลี่ยนแปลงสถานะของโปรพีเดียนทั่วโลก หากสคริปต์อัปเดตชุดใหญ่ของโปรพีเดียนไปยังโปรแกรม แยกออกเป็นช่องของแต่ละเฟรม |
เตรียม/ปรับปรุงเตรียม/ปรับปรุงไม่ถูกต้องFastClusters | เตรียมรูปร่างโดยปกติ "FastClusters" ที่ใช้เพื่อเรนเดอร์ Humanoids ส่วนลูกศรเฉพาะจำนวนชิ้นส่วน เหลี่ยมมุม และขนาดของเหลี่ยมมุม | ลดการใช้ 'Humanoids' ภายใต้วัตถุที่ไม่ใช่ Humanoids นี่ไม่ควรจะใช้เพื่อลดการโทรเรียกการวาดเร็วขึ้นเมื่อ FastClusters กลืนกินมากขึ้น |
เตรียม/ปรับปรุงPrepare/updateDynamicParts | อัปเดตตำแหน่งสำหรับ Humanoids รถยนต์ และตัวอื่น ๆ ที่เคลื่อนที่ได้สำหรับการเรนเดอร์ | ลดจำนวนหรือความซับซ้อนของการเคลื่อนที่ Humanoids หรือรถยนต์ที่มองเห็นได้ การผสานส่วนของวัสดุและสีเดียวกันสามารถช่วยได้ |
เตรียม/ปรับปรุงPrepare/updateInstancedClusters | เตรียมโครงสร้างคงที่ที่ใช้การเรนเดอร์แบบจุด (ชิ้นส่วนและชิ้นส่วนเมช) ติดฉลาก "กลุ่ม" และ "กรอบ" เพื่อแสดงจำนวนเงินที่ปรับปรุง | ใช้เมชและวัสดุน้อยลง คุณยังสามารถสร้างคลัสเตอร์โดยใช้วัตถุที่มีลักษณะเหมือนกัน - ขนาด สี วัสดุ |
ประสิทธิภาพ | เมื่อมีคำสั่งการเรนเดอร์จริงถูกสร้างและออก | ดูฉลากประสิทธิภาพด้านล่าง |
ประสาน/กรอก GUI Vertices | การเรนเดอร์ UI เติมเต็มบุฟเฟอร์ดด้วย UI สำหรับตกแต่ง "Gui count" เลขานุกรมแสดงจำนวนเอเจนต์ในรายการเรนเดอร์ | หากค่าใช้จ่ายสูง ลดจำนวน UI ที่ปรับปรุงโดยการปิดการใช้งานมันเมื่อมันไม่ได้รับการใช้งานโดยการรับรองว่ามันถูกซ่อนอยู่อย่างถูกต้อง |
รัน/ฉาก/ขอให้สั่งซื้อFrustum | ใช้ frustum การกรองเพื่อให้วัตถุที่ไม่มองเห็นไม่ได้รับการเรนเดอร์ | หากมีค่าใช้จ่ายสูงที่หมายถึงมีตัวองค์ประกอบจำนวนมาก บางทีให้ใช้เมชใหญ่ขึ้นที่มีรายละเอียดมากขึ้นโดยเฉลี่ยจากการใช้หลายชิ้นขนาดเล็ก |
ประมวลผล / ฉาย / คํานวณแสง | การคํานวณแสงใกล้กล้อง | จัดการจำนวนแหล่งแสงหรือย้ายกล้องน้อยลงเพื่อลดเวลาในการคำนวณแสง |
ประสิทธิภาพ/ฉาก/คํานวณแสง/LightGridCPU | อัปเดตการตั้งค่าการประกายของ voxel ซึ่งใช้ใน Voxel และ ShadowMap โหมด และในระดับคุณภาพด้านล่าง 4 ในโหมด Future โหมด | หากการปรับปรุงสถานที่ว่างของชุดชนะใช้เวลานานเกินไปโปรดพิจารณาการใช้เทคโนโลยีความละเอียดต่ำลงหรือลดจำนวนชิ้นส่วน หรือติดตั้งชิ้นส่วน |
รวม/ฉาย/คํานวณแสง/ฉาย/ระบบแผนที่เงา | อัปเดตแผนที่เงา ไม่ได้ดำเนินการในระดับคุณภาพด้านล่าง 4 หรือเมื่อ Lighting.Technology ติดตั้งเป็น Voxel | หากตั้งค่าการจัดเตรียมแสงเป็น Future ให้ลดมันเป็น ShadowMap หรือลดจำนวนแสง คุณยังสามารถใช้ Light.Shadows |
ทำ/ฉาก/ส่องแสง, แก้ไขสี, MSAA, SSAO และ SSAOApply | การเรนเดอร์หลังการประมวลผล | ลดจำนวนเอฟเฟกต์การประมวลผลหลังการแปรรูป โดยปกตินี่ไม่ได้สำคัญ |
ประสิทธิภาพ/ฉาก/UI | การเรนเดอร์ UI ใน Id_Screen มีแท็งก์เมทที่ใช้แล้ว วัสดุ และเหลี่ยมมุม | ลดจำนวนของส่วนประกอบ UI ที่มองเห็นได้ โดยใช้ CanvasGroups อาจช่วยลดการใช้หน่วยความจำเพิ่มขึ้น |
ประสาน/ฉาก/UpdateView/ปรับปรุง Particles, ปรับปรุงขีดจำกัด Particle | อัปเดตตำแหน่งและขอบเขตของอนุภาค | ลดจำนวน ParticleEmitters ออกอากาศ อัตราการปล่อย เวลาชีวิต ฯลฯ จํากัดการเคลื่อนที่ของอิสต์ |
รหัส_Opacity | ชิ้นส่วนในฉากที่มีค่าความโปร่งใส 0 | |
รหัส_โปร่งใส | ชิ้นส่วนในฉากที่มีค่าความโปร่งใสอื่นจาก 0 | ลดการใช้งานของความโปร่งใสบางส่วน (มีค่าอื่นนอกเหนือจาก 0 และ 1) |
รหัส_ฉลาก | ภาพที่อยู่ในฉาก | |
ปฏิบัติ/นำเสนอ | รอให้เสร็จสิ้นการเรนเดอร์ภาพก่อนหน้านี้; จริงๆ จะเป็นเรนเดอร์คำสั่งให้กับเอ็นจีพี; จัดการกับทรัพยากรกราฟิกระดับต่ำ | ลดความซับซ้อนของฉากโดยรวม หากขั้นตอนนี้ใช้เวลานาน คุณอาจจำกัดตัวด้วยหน่วยประมวลผลกราฟิก |
ทำ/นำเสนอ/รอให้เสร็จสิ้น | รอให้ CPU จบการเรนเดอร์เฟรมก่อนหน้านี้ | หากเกิดขึ้นบ่อยไป จำนวนสิ่งที่เรนเดอร์จะสูงเกินไป FRM ช่วยในการสมดุลสิ่งนี้ แต่ถ้ามันเกิดขึ้นต่อไป พยายามใช้รายละเอียดน้อยลง |
สคริปต์
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
เรนเดอร์/การเรนเดอร์ล่วงหน้า/fireBindToRenderSteppedCallbacks | การทำงานที่ผูกติดขัดจะแสดงขั้นตอนโดย RunService:BindToRenderStep() . | ให้ใช้งานในสคริปต์โดยใช้ RunService:BindToRenderStep() ทำงานให้น้อยที่สุดเท่าที่จะเป็นไปได้ |
เรนเดอร์/ก่อนเรนเดอร์/RunService.RenderStepped | รุ่นฟังก์ชันที่เกี่ยวข้องกับกิจกรรม RunService.RenderStepped | คล้ายกับ BindToRenderStep ให้แน่ใจว่าการใช้งานโดยใช้เหตุการณ์นี้ทำงานให้น้อยที่สุดเท่าที่จะเป็นไปได้ |
รองรับ HybridScriptJob | รวบรวมสคริปที่รอด้วยเฟรมเวลา | ขั้นตอนนี้มีงบประมาณในการประมวลผลสำหรับการประมวลผลสคริปต์ที่รอดำเนินการ ดังนั้นหากคุณมีสคริปต์รอดำเนินการมากเกินไปหรือสคริปต์ที่มีเวลาในการประมวลผลนานก่อนที่จะนำเสนอผลลัพธ์ ขั้นตอนนี้สามารถใช้ได้ห |
LuaGC | วัฏจัดเก็บขยะ Lua ให้ข้อมูลประเมินความจำเกี่ยวกับการจัดสรรทั้งหมดและจำนวนเงินที่ถูกดีดออก | โต๊ะ lua สระน้ําและวัตถุอื่น ๆ ที่เก็บได้หรือพยายามลดการสร้างชั่วคราวหรือสตริง |
Heartbeat/RunService.Heartbeat | ดำเนินการฟังก์ชันที่เชื่อมต่อกับ Class.RunService.Heartbeat``event.Talk ไปยังการซิมูลเลติกและการติดต่อของสคริปต์ คำอธิบายปัจจุบันเป็นคำอธิบายทั่วไปพอสมควรที่จะไม่ผิด | ลดจำนวนหรือ workload ของฟังก์ชันที่เชื่อมต่อกับ RunService.Heartbeat |
จำลอง
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
ความเป็นเจ้าของ物理ศาสตร์แบบจัดการ | กำหนดว่ามีอำนาจหรือไม่มีอำนาจบางรายการเช่นส่วน | ความเป็นเจ้าของ物理ศาสตร์แบบจัดการ |
การจำลอง/การประกอบ | อัปเดตต้นไม้ของวัตถุที่เชื่อมต่อกัน (การรวม) ที่ใช้โดยเครื่องยนต์ฟิสิกส์ | ลดจำนวนของข้อต่อที่ถูกสร้างหรือทำลาย |
การจำลอง/ฟิสิกส์SteppedTotal/physicsStepped | ดำเนินการจำลองฟิสิกส์ | ลดจำนวนและความซับซ้อนของร่างกายที่ถูกจำลองทางกายภาพ |
การจำลอง/ฟิสิกส์SteppedTotal/ฟิสิกส์Stepped/SpacialFilter/filterStep | อัปเดตเกาะจำลอง, จัดเรียงชิ้นส่วนตามความเป็นเจ้าของเครือข่าย, จำลองในพื้นที่พื้นดิน เกาะเป็นกลุ่มของชิ้นส่วนที่สามารถจำลองได้อย่างอิสระ | หลีกเลี่ยงการตั้งค่าเป็นเจ้าของเครือข่ายบ่อยๆ ให้กลุ่มของชิ้นส่วนอยู่ไกลออกไปพอที่จะสามารถจำลองได้อย่างอิสระ |
การจำลอง/ฟิสิกส์SteppedTotal/physicsStepped/worldStep/stepContacts | อัปเดตติดต่อระหว่างวัตถุ | ลดจำนวนการชนกันของตัวอักษรในครั้งเดียวหรือใช้กล่องเคลื่อนที่ง่ายขึ้น ลูกบาศก์ดีกว่าเนื้อผ้าที่ซับซ้อน |
การจำลอง/ฟิสิกส์SteppedTotal/physicsStepped/worldStep/stepWorld หรือ stepWorldThrottled | แก้ปัญหาเคมีภาพที่เกี่ยวข้องกับตัวเชื่อม การลอยตัว และ Humanoids เมื่อเครื่องยนต์ถูกโหลดเกินไปและไม่สามารถเรียกใช้ทุกอย่างในเวลา | ขึ้นอยู่กับสถานที่ที่เวลาจะไปตามสามขั้นตอนต่อไปนี้: stepContacts: การตรวจจับการชนกันขั้นแคบของสามขั้นตอน. Solver step: ให้ตำแหน่งของอัตราการปรับแต่งและแก้ไขการชนกันของขั้นตอนอื่น ๆ และค้ |
แจ้งเคลื่อนย้ายอัฒจรรย์ | ช่วยติดตามว่าองค์ประกอบต่างๆ ได้อยู่ในการนอนหลับเท่าไหร่ | |
การจำลอง/ฟิสิกส์SteppedTotal/physicsStepped/interpolateNetworkedAssemblies | ส่งต่อพรรคพวกที่ไม่ได้รับการควบคุมโดยเครือข่ายนี้ | ตั้งเจ้าของเครือข่ายของชิ้นส่วนนี้เป็นเพื่อนี้เพื่อลดการทำงานทางฟิสิกส์มากขึ้น แม้ว่านี่จะทำให้เกิดการทำงานทางฟิสิกส์มากขึ้นที่อื่น |
การจำลอง/การจัดการFallenParts | ลบรายการที่ตกลงมาใต้ Workspace/FallenPartsDestroyHeight | ลดความสูงในการทำลายหรือลดจำนวนชิ้นส่วนที่ตกลงไปในความสูงในการทำลาย |
การเต้นของหัวใจ/การเต้นของหัวใต้/พื้นที่ทำงานบนหัวใจ/การอัปเดตทางสายตา/การนอนหลับ | ส่วนที่สองของ NotifyMovingAssemblies | |
Heartbeat/RunService.Heartbeat | ดำเนินการฟังก์ชันที่เชื่อมต่อกับ Class.RunService.Heartbeat``event.Talk ไปยังการซิมูลเลติกและการติดต่อของสคริปต์ คำอธิบายปัจจุบันเป็นคำอธิบายทั่วไปพอสมควรที่จะไม่ผิด | ลดจำนวนหรือ workload ของฟังก์ชันที่เชื่อมต่อกับ RunService.Heartbeat |
worldStep/สเต็ปติดต่อ | ช่วยให้การจำลองฟิสิกส์แสดงตำแหน่งติดต่อหลายรายในแต่ละครั้ง | ลดจำนวนวัตถุที่ชนกัน |
แก้ปัญหา | ช่วยให้การจำลองฟิสิกส์แก้ปัญหาการเคลื่อนไหวของวัตถุ | |
การแปลภาษาของ Mecanism | ช่วยด้วยกับ InterpolateNetworkAssemblies |
UI
ฉลาก | คำอธิบาย | คำแนะนำประสิทธิภาพ |
---|---|---|
เรนเดอร์/ก่อนเรนเดอร์/อัปเดตน้ำเข้า | อัปเดตและเพิ่มเติมการเกิดขึ้นเหตุการณ์ที่เกี่ยวข้องกับการป้อนข้อมูลของผู้ใช้ทุกครั้งเมื่อผู้ใช้ป้อนข้อมูลครั้งสุดท้าย | นี่คือเมื่อเหตุการณ์ที่เกี่ยวข้องกับการป้อนของผู้ใช้จะเกิดขึ้น มีความสำคัญที่จะพยายามที่จะทำงานมากเกินไปโดยตรงเมื่อคุณได้รับการป้อน พิจารณาทำให้จำนวนงานขนาดเล็กสำหรับการป้อน แ |
เรนเดอร์/ก่อนเรนเดอร์/TweenService | อัปเดตวัตถุที่ถูกขยายโดยใช้ TweenService และเรียกคืนการเรียกแล้วเรียบร้อย เช่น เรียกให้กับ TweenSize หรือ TweenPosition | ลดจำนวนวัตถุที่สร้างโดย TweenService และให้แน่ใจว่าคำติชมทำงานได้น้อยที่สุด |
เรนเดอร์/ก่อนเรนเดอร์/UpdateUILayouts | อัปเดตตำแหน่งและขนาดของรายการ UI | ลดจำนวนของส่วนประกอบ UI ที่ปรับแต่งหรือเรียงลำดับใหม่โดยไม่ต้องใช้ความพยายามอัตโนมัติ, เช่น สิ่งที่จัดการโดย UILayout |
Heartbeat / TweenService | ในเซิร์ฟเวอร์, อัปเดตวัตถุด้วย TweenService เท่านั้น ในลูกค้า, นี่จะทำในขั้นตอนก่อนเรนเดอร์แทน | ลดจำนวนวัตถุที่ปรับแต่งจาก TweenService |