Chat Room

บทที่ 5.1 PlayerController : Camera

วันนี้ผมจะมาสอนเรื่องการสลับ กล้องนะครับและการ ZOOM เข้า ZOOM ออก

ก่อนอื่นคุณต้องเข้าไปดูบทที่ 5 อ่าจำได้ไหมที่ผมสอนว่าสามารถตั้งค่าอะไรพวกนั้นได้

จะมีบาง function ที่เราสามารถนำเข้ามาใช้ได้จริง

ก่อนอื่นก็เลือกปุ่มที่จะเป็นการทำให้ zoom in zoom out นะครับแล้วก็ สังเกตุบรรทัด GBA_

ครับจะเห็นว่า Command= ข้างหลังนี่ นี่มันคือคำสั่งครับ ผมจะเลือก

PrevWeapon และ NextWeapon ซึ่งจะเป็น MouseScrollUp และ MouseScrollDown อ่าาา

ผมรู้ได้ไงครับผมก็เอาเจ้า GBA_ ที่มี command ข้างบนมาดูบรรทัดข้างข้างล่างครับ

บรรทัดข้าง บนจำพวก GBA

Name="GBA_PrevWeapon",Command="PrevWeapon"

บรรทัดข้างล่าง จำพวก Mouse Keyboard

Name="MouseScrollUp",Command="GBA_PrevWeapon" นี่ไงครับ

อ่าเมื่อเราได้มาแล้วก็เข้าไปที่ MyController เลยครับ

อ่าเมื่อเข้า MyController เสร็จแล้วให้ทำการเขียน


exec function PrevWeapon(){
worldinfo.game.broadcast(self,"Prev");
}


exec function  NextWeapon (){
worldinfo.game.broadcast(self,"Next");
}

แล้วลองเลื่อนขึ้นเลื่อนลงดู ครับจะเห็นว่า มี ตัวหนังสือสีขาวๆ Prev กับ Next มาด้วย
นั่นก็หมายว่าคุณทำถูกต้องแล้วดังนั้นเราจะมาเริ่มใช้คำสั่ง Camera ให้มัน Zoom เข้า Zoom ออกกัน

อ่ะให้เราไปที่ MyPawn อีกรอบแล้วยัด function นี้เข้าไป


simulated function name GetDefaultCameraMode( PlayerController RequestedBy )
{
    return 'FreeCam_Default';
}

หลังจากนั้นกลับมาที่ MyController กลับมาที่ function PrevWeapon()

แล้วเพิ่ม PlayerCamera.FreeCamDistance -= 64; ลงไป Next ก็เช่นกันแต่เปลี่ยนจาก

-= มาเป็น += นะครับ สาเหตุก็เพราะว่า ผมจะทำการให้กล้องมัน มีระยะ เลื่อนเข้าเลื่อนออกครับ

อ่ะใส่แล้วลองรันดู



อ่า Zoom เข้า Zoom ออกได้แล้วววว แต่ทำไม Camera หมุน Unit ไม่หมุน นั่นก็เป็นเพราะ Free Camera ไม่ได้สั่งให้ Pawn นั้นหมุน ตาม camera เพราะ เป็น Free ครับมันจะทำให้ทำเกมได้หลากหลายแนว
ซึ่งวิธีการปรับก็ง่ายๆ เลยครับ


function updaterotation( float time){
     local rotator new_rot;
     super.updaterotation(time);
     new_rot = rotation;
     pawn.setrotation(new_rot);
}

แล้วลองรันดู ปรากฏว่า ขึ้นลง หัวทำไมดิ่งลงอ่าาาาา เรามีวิธีแก้ดังนี้ เพราะว่า pitch มันไปตามกล้อง
ดังนั้นเราต้อง fix ให้มันเป็น 0 เอออ ทำไงน้ออออ ก็งี้เลย


function updaterotation( float time){
     local rotator new_rot;
     super.updaterotation(time);
     new_rot = rotation;
     new_rot.pitch = 0;
     pawn.setrotation(new_rot);
}

แค่นี้แหล่ะ ก็ได้แล้ว

Q: ทำไมถึงต้อง new_rot ด้วยล่ะ เราสั่ง rotation.pitch เลยไม่ได้หรอ
A: ไม่ได้ครับเพราะว่า rotation เป็นค่า Cont จึงทำการดัดแปลงหรือเปลี่ยนแปลงไม่ได้ รับได้อย่างเดียว

สำหรับวันนี้ ผมขอ เอาไว้แค่นี้ก่อนเดี๋ยว เอาบทความ สร้าง menu กันเลยดีกว่าเพราะ
ยังไงเดี๋ยวเราได้เจอ ไอพวกนี้หนักแน่ หลังเกมแรก นี่แหละ เร็วๆนี้พบกับ ความโหด มันส์
และ ระบบ ทำเกมได้แหวกแนวแน่นอน


CalcCamera ใช้คู่กันไม่ได้ ไม่งั้นมันจะไม่ทำการ ZOOM





Example Video Camera

Link to page

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