ในโปรเจกต์นี้เราจะทำให้ Object อันหนึ่งที่อยู่ใน Level มีการเคลื่อนไปมา แนวคิดในการสร้างคำสั่งก็คือเราจะดึงค่าคุณสมบัติ Transform ของ Object ออกมา แล้วทำการปรับเปลี่ยนค่า Location ให้ใหม่ แล้วกำหนดกลับไปให้ Object คุณสมบัติ Transform ใหม่นี้ก็จะทำ Object มีการย้ายตำแหน่งตามค่าที่ถูกกำหนด ซึ่งการปรับเปลี่ยนค่าดังกล่าวจะให้เกิดขึ้นทุกๆ Frame ของการแสดงผลหน้าจอ
ในวิดีโอนี้จะแสดงขั้นตอนทั้งหมด หากต้องการรายละเอียดมากขึ้นสามารถอ่านเนื้อหาที่ต่อจากวิดีโอนี้
โพสต์นี้ยาว มีหัวข้ออะไรบ้าง
สร้าง Project
ในเบื้องต้นให้ทำการสร้าง project โดยเลือก Template เป็น ชนิด First Person และตั้งค่าให้เป็น Blueprint
จากนั้นสร้าง Test Object โดยไปที่แท็บ Place Actor ในหน้าต่างโปรแกรม แล้วเลือก Basic จากนั้นคลิกเลือก Cylinder แล้วลากไปวางใน Viewport
กำหนดคุณสมบัติ Object เป็น Moveable
เนื่องจาก Test Object ที่เราสร้างขึ้นมา ค่า Default ที่โปรแกรมกำหนดไว้จะเป็นแบบ Static (หยุดนิ่ง) หากต้องการให้ Test Object เคลื่อนที่ได้นั้น ต้องไปกำหนดค่าให้เป็นแบบ Moveable (เคลื่อนที่) ก่อน
เริ่มจากการคลิกเลือก Cylinder ใน Viewport แล้วไปที่แท็บ Details จากนั้นคลิกที่ปุ่ม Blueprint/Add Script
ทำการตั้งชื่อ Blueprint ซึ่งผู้อ่านสามารถตั้งชื่อได้ตามต้องการ ในที่นี้จะใช้ชื่อ CylinderTarget_Blueprint
เมื่อหน้าต่าง Blueprint ปรากฏขึ้นมาให้ ให้ไปที่แท็บ Components ซึ่งอยู่ทางด้านซ้ายมือของหน้าต่าง ให้คลิกเลือก StaticMeshComponent จะสังเกตุได้ว่าแท็บ Details ที่อยู่ทางด้านขวาของหน้าต่างนั้นจะแสดงรายละเอียดต่างๆ ขึ้นมา
ไปที่แท็บ Detailas ทางด้านขวามือ ในส่วนของ Transform กำหนด Mobility ให้เป็น Moveable
สร้าง Variable ให้ Test Object
เราจะทำการสร้างตัวแปร 2 ตัว ให้กับ Test Object โดยตัวแปรตัวแรกจะมีชื่อว่า speed จะใช้เก็บค่าความเร็วการเคลื่อนที่ ส่วนตัวที่สองมีชื่อว่า direction ใช่เก็บค่าทิศทางการเคลื่อนที่
ให้ไปที่แท็บ My Blueprint ซึ่งอยู่ใต้แท็บ Components อยู่ของหน้าต่าง Blueprint ไปที่หมวดหมู่ Variable ซึ่งจะมีเครื่องหมาย (+) อยู่ทางด้านขวามือ ในการเพิ่มตัวแปรให้เราคลิกที่เครื่องหมาย (+)
ให้ไปที่แท็บ Details เราจะทำการกำหนดคุณสมบัติให้กับตัวแปรของเรา ดังนี้
Variable Name : speed
Variable Type : Float (จำนวนที่มีทศนิยม)
Instance Edittable : Check (ทำให้ค่าของตัวแปรนี้สามารถเปลี่ยนแปลงจากภายนอกได้)
จากนั้นให้ทำการ complie จะปรากฏหมวดหมู่ Default Value ขึ้นในด้านล่างสุดของแท็บ Details ให้เรากำหนดค่าเป็น 200 ซึ่งจะค่าเริ่มต้นของตัวแปร speed
ทำการเพิ่มตัวแปรตัวที่สอง และให้กำหนดคุณสมบัติดังนี้
Variable Name : Direction
Variable Type : Vector (ปริมาณที่มีขนาดและทิศทาง)
Edittable : Check
ให้เรากำหนด Default Value ของแกน Y เป็น -10.0
Script คำนวณทิศทาง
ในหน้าต่าง Blueprint ให้ไปที่แท็บ Event Graph คลิกเลือกตัวแปร Direction ในหมวด Variable แล้วลากมาวางลงใน graph เลือกเป็น Get โหนดนี้จะเป็นการอ่านค่าจากตัวแปร Direction
ทำการเพิ่มโหนดที่ชื่อว่า Normalize ซึ่งโหนดนี้เวลาที่เราค้นหามันจะอยู่ในหมวดที่ชื่อว่า Vector โหนด Normalize จะทำหน้าที่ในการแปลงเวกเตอร์ทั่วไปให้เป็นเวกเตอร์หนึ่งหน่วย (Unit Vector)
จากนั้นทำการเชื่อมโหนดทั้งสองเข้าหากัน
คำสั่งชุดนี้ก็จะเป็นการนำค่าจากตัวแปร Direction ซึ่งเป็นเป็นค่าแบบเวกเตอร์ (x:0, y:-10, z:0) มาการเปลี่ยนเป็นเวกเตอร์หนึ่งหน่วย (x:0, y:-1, z:0) โดยโหนด Normalize ซึ่งค่าที่ได้นี้จะนำไปใช้ในการกำหนดทิศทาง
Script คำนวณระยะทาง
คลิกเลือกตัวแปร Speed ในหมวด Variable แล้วลากมาวางลงใน graph เลือกเป็น Get โหนดนี้จะเป็นการอ่านค่าจาก Speed
ทำการเพิ่มโหนดที่ชื่อว่า Get World Delta Second โหนดนี้จะให้ค่าเวลาเป็นวินาทีของผลต่างเวลาที่แต่ละ Frame แสดงผลห่างกัน
เพิ่มโหนด x (การคูณ) ในการค้นหาให้พิมพ์ * (ดอกจัน) แล้วเลือกเป็นแบบ Float * Float โหนดนี้จะเป็นการนำเอาจำนวนที่มีทศนิยมมาคูณกัน
จากนั้นทำการเชื่อมโหนด Speed และ Get World Delta Second เข้าหาโหนด X
คำสั่งชุดนี้ก็จะเป็นการนำค่าจากตัวแปร Speed มาคูณค่าเวลาที่ได้จากโหนด Get World Delta ผ่านทางโหนด X ซึ่งผลลัพธ์ที่ออกมาก็จะได้ระยะที่ Test Object ต้องเคลื่อนที่ในแต่ละ Frame
Script คำนวณเวกเตอร์ระยะทาง
เพิ่มโหนด X (การคูณ) เลือกเป็นแบบ Vector * Float โหนดนี้จะเป็นการนำเอาจำนวนที่เป็นเวกเตอร์กับจำนวนที่มีทศนิยมมาคูณกัน
จากนั้นให้เชื่อมโหนด Normalize กับโหนด X (Float * Float) เข้ากับโหนด x (Vector * Float)
คำสั่งชุดนี้ก็จะเป็นการนำเอาเวกเตอร์ที่ใช้แสดงทิศทางจากโหนด Normalize มาคูณกับค่าระยะทางจากโหนด X (Float * Float) โดยใช้โหนด x (Vector * Float) ซึ่งผลลัพธ์ที่ออกมาก็จะได้เวกเตอร์ของระยะทาง (x:0, y:-200, z:0) ที่ Test Object ต้องเคลื่อนที่ในแต่ละ Frame
Script หาตำแหน่ง Object
คลิกเลือก StaticMeshComponent ลากไปวางลงใน graph เราจะได้โหนดที่เป็นตัวแทนของ Test Object ซึ่งเราจะสามารถดึงเอาค่าคุณสมบัติต่างๆ มาใช้งานได้
เพิ่มโหนด Get World Transform ลงใน graph โหนดนี้จะทำการดึงเอาค่าคุณสมบัติ Transform ของ Object ได้แก่ Ratation (การหมุน) Scale (การลด/ขยายขนาด) Location (ตำแหน่ง)
เพิ่มโหนด Break Transform โหนดนี้จะทำการแยกค่าคุณบัติ Tranform ที่ได้จากโหนด Get World Transform ออกตามรูปแบบคุณสมบัติ
จากนั้นทำการเชื่อมโหนดทั้ง 3 เข้าด้วยกัน
คำสั่งชุดนี้จะเป็นการหาตำแหน่งของ Test Object โดยการใช้โหนด Get World Transform ดึงค่าจากโหนด StaticMeshComponent ซึ่งค่าที่ได้จะเป็นคุณสมบัติ Transform ของ Object จากนั้นทำการแยกค่าออกมาตามรูปแบบคุณสมบัติ โดยใช้โหนด Break Transform
Script คำนวณตำแหน่งให้ Object เคลื่อนที่
เราจะนำเอาเวกเตอร์ระยะทางที่เราหาไว้ มารวมเข้ากับค่าตำแหน่งของ Test Object ผลลัพธ์ที่ได้ก็คือตำแหน่งใหม่ที่ Test Object จะเคลื่อนที่ไป
เพิ่มโหนด + (การบวก) เลือกเป็นแบบ Vector + Vector โหนดนี้จะทำการรวมค่าที่เป็นเวกเตอร์เข้าด้วยกัน
จากนั้นเชื่อมต่อโหนด x (Vector * Vector) และ Output Pin ที่ชื่อว่า Location ของโหนด Break Transform เข้ากับโหนด + (Vector + Vector)
เพิ่มโหนด Make Transform ลงใน graph โหนดนี้จะเป็นสร้างค่าคุณสมบัติ Transform ใหม่ที่จะนำไปกำหนดค่าให้กับ Test Object ขึ้นมา
ทำการเชื่อมโหนดต่างๆ เข้าด้วยกันตามรูป
คำสั่งชุดนี้จะเป็นการนำค่า ระยะทาง มารวมค่า Location ซึ่งเป็นพิกัดตำแหน่งปัจจุบันของ Test Object ทดสอบ โดยโหนด + (Vector + Vector) ทำให้ได้พิกัดตำแหน่งใหม่ จากนั้นทำการปรับเปลี่ยนคุณสมบัติ Transform โดยใช้โหนด Make Transform แล้วค่าพิกัดตำแหน่งใหม่ทาง Input Pin ที่ชื่อว่า Location
Script ทำให้ Object เคลื่อนที่
เพิ่มโหนด Set Actor Transform โหนดนี้จะนำค่าคุณสมบัติ Tranform มากำหนด ให้กับ Test Object
จากนั้นเชื่อมต่อโหนด Event Tick เข้ากับโหนด Set Actor Transform
เชื่อมต่อ Output pin ที่ชื่อว่า Return Value จากโหนด Make Transform ไปยัง Input pin ของโหนด Set Actor Transform ที่ชื่อว่า New Transform
คำสั่งชุดนี้จะเป็นการปรับเปลี่ยนคุณสมบัติ Tranform ให้กับ Test Object โดยนำค่าคุณสมบัติที่เตรียมไว้แล้วจากโหนด Make Transform มากำหนดให้ Test Object โดยโหนด Set Actor Transform โดยการปรับเปลี่ยนค่าคุณสมบัตินี้จะเกิดขึ้นในทุก Frame การแสดงผลของหน้าจอซึ่งถูกควบคุมโดยโหนด Event Tick ส่งผลทำให้ Test Object เกิดการเคลื่อนที่เกิดขึ้น
Script เปลี่ยนทิศทางการเคลื่อนที่ของ Object
จากขั้นตอนที่ผ่านหากทดลองรัน Project ของเราดูจะพบว่า Test Object นั้นจะเคลื่อนที่ไปอย่างต่อเนื่องและหลุดออกจาก Level ของเราไป ดังนั้นในขั้นตอนนี้เราจะมาเพิ่มชุดคำสั่งเพื่อกลับทิศทางการเคลื่อนที่ เพื่อให้ Test Object เคลื่อนที่ไปมา
ให้เพิ่มโหนด Delay แล้วกำหนด Duration เป็น 6 วินาที โหนดนี้จะเป็นการหน่วงเวลาก่อนจะไปทำงานในโหนดถัดไปตามค่า Duration ที่กำหนดไว้
เพิ่มโหนด FlipFlop โหนดนี้จะทำสลับเส้นทางการทำงานของคำสั่ง
เพิ่มโหนดสำหรับกำนดค่าตัวแปร Direction จำนวน 2 โหนด โดยคลิกเลือกที่ตัวแปร Direction ในแท็บ My Blueprint แล้วลากมาวางใน graph เลือกเป็น Set แล้วกำหนดค่า Y เป็น 10.0 กับ -10.0 ตามลำดับ
คำสั่งชุดนี้จะเป็นการสลับการตั้งค่าให้กับตัวแปร Direction จากค่า Y เท่ากับ 10 ไปเป็น -10 โดยโหนด FlipFlop โดยการทำงานจะเกิดขึ้นในทุก 6 วินาที ซึ่งการหน่วงเวลากล่าวจะถูกควบคุมโดยโหนด Delay
โหนตต่างภายใน Bluprint แสดงดังภาพข้างล่างนี้