Chat Room

บทที่ 4.1 function Bump หรือ Touch

เรามาดูความแตกต่างระหว่าง

Touch กับ Bump

เดี๋ยวขอเวลาเขียน unreal script แปบนึง
ที่ผมเคยใช้แต่ยังไม่ได้หา ความจริงแต่อย่างใด

คือ Touch เนียเราจะต้องเข้าไปใน Collision แต่ไม่ได้หมายความว่า เราจะต้องปิดหรือยกเลิก Coillsion
สำหรับ Actor นะครับ ( Actor ในที่นี้คือ ตัวละครนั่นแหล่ะครับ ) ฉะนั้น การที่จะใช้ Touch ได้จะต้องทำคู่กับ bBlockActors=false ซึ่งถ้าเป็น true จะไม่สามารถ เดิน ผ่าน Collision ไม่ได้อยู่ดี ฉะนั้นตัวนี้แหล่ะที่ทำให้ ผม งงอยู่นานส่วน การ bump ก็การวิ่งพุ่งไปชน โดยมาการเคลื่อนไหวชน Collision จะทำให้
bump เกิดการทำงานเกิดขึ้น


ก่อนอื่นเรามาเริ่มกันที่ Class MyPawn ก่อนครับ เรามาทำความเข้าใจกันก่อน
การ Bump หรือ การ Touch ต้องมี Collision เราจะต้องสร้าง สิ่งนี้ขึ้นมาโดยเราสามารถ กำหนดใน
DefaultProperties ได้ครับ


Begin Object Name=CollisionCylinder
CollisionRadius=+0034.000000 // ระรอบๆ เป็นวงกลม
CollisionHeight=+0047.000000 // ความสูง
End Object

โดยชื่อเริ่มต้น ก็คือ CollisionCylinder เปลี่ยนแปลงไม่ได้ครับ ถ้าเปลี่ยน มันไม่รู้จักเลย ในที่นี้ผมจะใช้
Collision แบบ Cylinder นะครับ

ทำไมถึงต้องประกาศ ทั้งๆที่ค่าเริ่มต้นมันก็มี Collision อยู่แล้ว คำตอบคือเจ้า Collision เนียถ้าเราไม่ประกาศ เวลามันจะตั้งเป็นค่าเริ่มต้นให้เวลาใส่ model ลักษณะเล็กๆใหญ่ๆ Model มันจะไม่เกาะพื้นมันจะลอยแบบนี้



จะได้ดั่งภาพที่เห็น ว่ามันลอยจริงๆ
ดังนั้นเราควรจะ ตั้ง Collision ให้มัน
เอาล่ะเรามาตั้ง Touch กันเถอะ
ก่อนอื่นก็ ใส่ collision ที่ผมให้ข้างบนกันก่อนดีกว่าครับ
เพิ่ม bBlockActors=false ใน defaultproperties ครับ

จากนั้น ก็มาลอง


event Touch(Actor Other, PrimitiveComponent OtherComp, Vector HitLocation, Vector HitNormal)
{
`log("test");
   
}

วางใน Class MyPawn ที่ผมสร้างขึ้นมา
แล้วไปลองรันดูว่า log มันขึ้น คำว่า test หรือเปล่า
ถ้าขึ้นคุณมาถูกทางแล้ว

ที่นี้เรามาดู Parameter ตัวที่หนึ่งจะหมายถึง ตัวละครที่เราวิ่งผ่าน
ส่วนตัวที่สองผมยังไม่เคยใช้มันจริงๆจังๆ เลยไม่อยากอธิบาย
ตัวที่สาม วิ่งผ่านที่จุดไหน ตัวที่ สี่คือ จุดมตราฐาน มันก็คือว่า เราวิ่งผ่าน Collision ที่เป็นวงกลม
เมื่อเราวิ่งผ่านไปตัดจุดไหน แบบเมื่อเข้า Collision เมื่อไหร่ ณ ตอนนั้น มันจะแสดงให้เห็นว่า
เราเข้า ไป touch ในจุด sin cos นั้นจะทำการ แสดง vector ออกมาว่า เราได้เข้า ณ ที่จุด vector นั่นๆ
นั่งเอง ( ว่างๆ จะหาตัวอย่างมาให้ )

เรามาดูในส่วน bump กันก่อนดีกว่า

event bump(Actor Other, PrimitiveComponent OtherComp, Vector HitLocation){
         `log("test");
}

ก็จะเหมือน ข้างบนเลยครับ parameter แต่จะไม่มี parameter ที่ 4 เพียงตัวเดียว
ดังนั้น

คราวนี้ก็ถึงตาคุณ ประยุคใช้แล้วล่ะครับ

อันนี้ ตัวอย่าง Touch



อันนี้ผมตั้ง Radius ไว้ที่ 70 ครับ มันเลย แสดงออกผลมาก่อน
จะสังเกตุได้จาก scriptlog นะครับเพราะว่าผมไม่ได้พิมพ์ Test แต่ผม log ในค่าของ hitNormal นะครับ

ในที่นี้สามารถ ทำเกมเช่นแนว Mario ได้ และอื่นๆ

สรุป

Touch คือการเข้าไปอยู่ใน Collision ครับ
Bump คือเมื่อเกิดการชนเกิดขึ้น

ไม่มีความคิดเห็น: