วันนี้ผมจะมาสอนส่วนต่างๆ ใน UDKBot นะครับ ผมก็จะสอนให้ Bot วิ่งตาม
เมื่อ Bot เห็นเราแล้วจะทำการวิ่งตาม หรือการทำให้บอทวิ่งนะครับ
ก่อนอื่นเข้า BotController เลยครับ
การให้ Bot ทำการมองเห็น ผู้เล่น
ก่อนอื่นผมก็สร้าง
Event SeePlayer(Pawn Player){
`log(Player);
}
แล้วทำการลองรันดู โดยที่ผมจะไปยืนตรงหน้า bot นะครับ
มันบอกแล้ว MyPawn_0 หมายถึง Class ผู้เล่น คนที่ 0 นะครับ
อ่ะเราลอง ให้ Bot ทำการ หันหน้ามาหาเราดีกว่าลองดู ครับ
ลบ `log(Player); ออกใส่ Focus = Player; ลงไปแทน แล้วลองรันดูครับ อ่าว มันหันหน้าตาาามม เราด้วยย
ทีนี้จะเป็นการสั่งบอทให้เดิมตามนะครับ
มีอยู่ สองคำสั่ง
MoveTo : การสิ่งบอทวิ่งไปตามที่เรากำหนดไว้
MoveToWard : การสั่งบอทให้วิ่งตามเร็ว หรือตาม Location ของ Pawn ที่เรากำหนด
มะเรามาลองกัน
เรายังอยู่ที่ BotController
ให้เราสร้าง Variable มาตัวนึงเอาไว้ ตรงหัวเลยครับ
Var Pawn MoveFollow;
และสร้าง
State Follow{
}
คราวนี้เรามาเพิ่ม การทำงาน ใน Event SeePlayer นะครับ
MoveFollow = Player;
เพิ่มตัวนี้เข้าไป แล้ว กระทำการ วิ่งไปหา state ที่ผมตั้งไว้
ก็พิมพ์เข้าไปอีก
Gotostate('Follow');
หลังจากนั้น ให้คุณไปเพิ่มคำสั่งข้างใน state Follow
begin:
MoveToWard(MoveFollow,MoveFollow,20);
goto('begin');
//----------------------------------------------------------------------------
var Pawn MoveFollow;
event Possess(Pawn iP,bool bV){
super.Possess(iP,bV);
Pawn.setMovementPhysics();
}
Event SeePlayer(Pawn Player){
Focus = Player;
MoveFollow = Player;
Gotostate('Follow');
}
state Follow{
begin:
MoveToWard(MoveFollow,MoveFollow,20);
goto('begin');
}
//-------------------------------------------------------------------------
เรามาทำความเข้าใจนะครับว่า
ทำไมผมจึงต้องสร้าง Variable MoveFollow มาสาเหตุเลยก็เป็นเพราะว่า variable Player มันข้ามไม่ได้
นั่นเอง แต่มีวิธีลัด ที่จะไม่ต้องสร้าง MoveFollow นั่นก็คือ
MoveToWard(Pawn(Focus),
Pawn(Focus) ,20);
ก็จะทำให้ ไม่จำเป็นต้องสร้าง MoveFollow นั่นเอง
เรามาดูการทำงานและหน้าที่ Parameter กันดีกว่า
MoveToward(Actor NewTarget, optional Actor ViewFocus, optional float DestinationOffset, optional bool bUseStrafing, optional bool bShouldWalk = (Pawn != None) ? Pawn.bIsWalking : false);
1: Actor เป็นเป้าหมายที่กำหนดให้วิ่งตาม
2: การ Focus หรือการหันของ Bot เนื่องจากถ้า Focus ข้างบนอย่างเดียวมันจะต้องรอให้วิ่งเสร็จ จึงจะหัน จึงต้องใช้ Unit ที่เราจะให้วิ่งตามด้วย นั่นเอง
3: ระยะทางปายทาง ตัวนี้หมายถึงว่า ระยะห่างในการตามนั่นเอง
เรามาต่อ MoveTo
MoveTo ก็จะคล้ายๆ
คราวนี้ให้เอา คำสั่ง ทั้งหมดของ MoveToWard ข้างต้นออกไปก่อนเพื่อจะได้รู้การทำงาน
เอาล่ะ คราวนี้ ตั้ง state ชื่อว่า Move_To
auto state Move_TO{
begin:
MoveTo(vect(25,90,0),,0);
MoveTo(vect(25,0,0),,0);
goto('begin');
}
แล้วลองรันดู
จะเห็นได้ว่ามันวิ่งไปวิ่งมา Parameter ที่เปลี่ยนไป จาก MoveToWard จะมีแค่ Parameter ตัวที่ 1
เท่านั้น เปลี่ยนจาก Actor เป็น Vector ซึ่งตัวนี้จะคอยกำหนดระยะทาง เป็น Vector เราสามารถ กำหนดเองได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น