ใช้ Line Renderer สร้างเส้นในเกม

2010_blog_4

สวัสดีครับ วันนี้ผมก็มี Tip ดีๆในการทำเกมด้วย Unity มาฝากเพื่อนๆเช่นเคย วันนี้เราจะมาลองใช้ Component ที่ชื่อว่า Line renderer กันครับ

Line renderer เป็น Component ที่อยู่ในหมวด Effect เป็น Component ที่ Unity มีไว้ให้เราตั้งแต่ต้น โดยไม่ต้องไปหาโหลดมาเพิ่มเองครับ ซึ่ง Component ตัวนี้จะสร้างเส้นขึ้นมา โดยเราสามารถกำหนดได้ว่าเส้นนี้จะเริ่มจากตำแหน่งไหน ไปสิ้นสุดที่ตำแหน่งไหนครับ

วันนี้เราจะมาลองตัวอย่างง่ายๆ นั่นคือการคลิกแล้วให้สร้างเส้นจากจุดที่คลิก พุ่งไปข้างหน้า 10 หน่วยกันดูครับ

01

จากภาพผมมี Scene พื้นฐานอยู่นะครับ เรามาเริ่มทำไปพร้อมๆกันครับ

ถัดมาเราจะสร้างสคริป โดยผมจะสร้าง GameObject มาตัวนึง ให้ชื่อว่า Controller แล้วเราสร้างสคริปชื่อว่า TestLineScript กันครับ

02

อีกส่วนนึงที่เราจะใส่ใน Controller ก็คือ Component พระเอกของเราในบทความนี้ครับ นั้นก็คือ Component Line renderer นั่นเอง

03

ถัดมาเราจะเขียนสคริปเพื่อทำให้แสดงผลเส้นกันครับ เริ่มจาก เราจะต้องสร้างตัวแปรเพื่อให้สคริปรู้จักกับ Line renderer ของเราก่อนครับ

04

โดยที่

LineRenderer line; – สร้างตัวแปรไว้เก็บค่า Line renderer ของเราครับ

line = gameObject.GetComponent<LineRenderer>(); – ใส่ไว้ใน Start เพื่อที่เราจะได้เอาค่า Component มาใส่ในตัวแปรที่เราเตรียมไว้

จากนั้น เราจะทำการสร้างเส้นจากจุดสองจุดครับ โดยอ้างอิงจากจุดที่เราคลิกนั่นเอง

05

จะเห็นได้ว่าผมใส่ฟังชั่นก์ไว้ใน Update เพื่อนที่เราจะได้จับการคลิกเม้าส์ในทุกๆเฟรมนั่นเองครับ

if (Input.GetMouseButtonDown(0)) – จับเงื่อนไขการคลิกเม้าส์ซ้าย

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); – สร้างเส้นโดยเอาค่าจากตำแหน่งเม้าส์มาใช้

line.SetPosition(0, ray.origin); – สร้างจุดแรกของเส้นที่จุด Origin ของ Ray

line.SetPosition(1, ray.GetPoint(10)); – สร้างจุดที่ 2 ของเส้นโดยให้ Getposition 10 หน่วยของเส้นนั้น

เมื่อได้ตามนี้ลอง Play ดูครับ อ้อ อย่าลืมเซฟสคริปทุกครั้งที่มีการเปลี่ยนแปลงด้วยนะครับ

06

ในหน้า Game อาจจะเห็นไม่ชัดเจนนักนะครับ แต่ถ้าดูที่ Scene view จะเห็นว่ามีเส้นพุ่งออกมาจากคล้อง ไปยังจุดที่เราคลิก พุ่งตรงไปข้างหน้า 10 หน่วยครับ ซึ่งการใช้ Line renderer นี้เราสามารถประยุกต์ไปใช้ในเกมหลายๆแบบได้เลยทีเดียวเดียวนะครับ

หวังว่าเทคนิคที่ผมนำมาฝากเพื่อนๆในวันนี้น่าจะทำให้เพื่อนๆมีตัวเลือกในการทำ Effect มากยิ่งขึ้นนะครับ แล้วพบกันใหม่โอกาสหน้าครับ