วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557

LERP คืออะไร?

LERP() เป็นฟังชั่นทางคณิตศาสตร์ ใช้เพื่อขยับค่าของตัวแปรเป็นอัตราส่วน เมื่อทำซ้ำๆกับค่าเดิม
จะทำให้ค่าเปลี่ยนแปลงไปด้วยอัตราที่ช้าลงหรือเร็วขึ้นเรื่อยๆ 
จึงมักจะนำไปใช้กับการเคลื่อนที่และการตอบสนองของ GUI (Graphic User Interface)




Lerp() คือการสั่งขยับค่าของตัวแปร เป็นอัตราส่วนของระยะห่างของสองตัวแปร
ถ้าหากจะใช้คำสั่งนี้กับ float ก็จะมี parameter แบบนี้ 
  • Mathf.Lerp(ค่า float เริ่มต้น, ค่า float สิ้นสุด, ค่าอัตราส่วน);
ถ้าใช้กับพิกัด(Vector3) 
  • Vector3.Lerp(ค่า Vector3 เริ่มต้น, ค่า Vector3 สิ้นสุด, ค่าอัตราส่วน);


ในที่นี้ขออธิบายของ float ละกันนะครับเพราะมันเข้าใจง่ายกว่า 
ถ้ารู้ของ float เเล้ว ของ Vector3 ก็ไม่ยากครับเพราะมันคอนเซปเดียวกัน

สมมุติเอาคำสั่งนี้มาเขียนเป็นสูตรเลขให้พออ่านออกก็จะประมาณว่า
  • Mathf.Lerp(a,b,ratio); = a + (b - a)*ratio
มันคือการเอาค่าเเรกเขยิบไปหาค่าที่สอง ด้วยอัตราส่วน(เปอร์เซ็น)ของระยะห่างของสองค่านั้นอัตราส่วน  (0.1 = 10%)   (0.25 = 25%)   bla bla..


ตัวอย่างเช่น
  • Mathf.Lerp(10, 20, 0.1f);
จะได้ค่า= 10 + (20 - 10)*0.1= 10+(10)*0.1= 10 + 1= 11
ส่วนของ Vector3 ก็ไม่ต่างกันเท่าไหร่ครับเเค่เปลี่ยนจาก 1 มิติ เป็น 3 มิติ เเล้วเครื่องมันก็จะคำนวนออกมา เป็นค่า Vector3 เช่นกัน
เวลาใช้งานจริงเราก็จะเอาค่าที่ได้จาก Lerp ไปใช้เป็นตำเเหน่ง ขนาด หรืออะไรก็ได้ตัวอย่างเช่นคำสั่งนี้จะทำให้วัตถุเคลื่อนที่หาจุด 0 0 0 แบบ smooth นะครับ
  • transform.position = Vector3.Lerp(transform.position , new Vector3(0,0,0), 0.1f);
อาจจะงงว่าสมูธมันคือยังไง ให้ลองนึกภาพรถที่วิ่งเเล้วกำลังเบรกแบบนิ่มๆ ประมาณนั้นล่ะครับเพราะพอคำสั่งทำงานครั้งเเรกมันเขยิบไป 0.1 พอครั้งที่สองระยะห่างมันเหลือ 0.9 เพราะงั้น 10% ของ 0.9 จะไม่ใช่ 0.1 อีกเเล้ว มันจะกลายเป็น 0.9*0.1 = 0.09 พอครั้งต่อๆไป ค่าที่เปลี่ยนไป(หรือถ้านึกถึงรถก็คือความเร็ว)มันจะลดลงเรื่อยๆ

-----------------------E--N--D-----------------------\@/