‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะทำการ refactoring pull trigger เพื่อให้พร้อมสำหรับการเพิ่มโค้ดเข้าไป
‫ในตอนนี้ มันใกล้จะจบแล้วจริงๆ ดังนั้นเราจะจัดโครงสร้างใหม่ให้เป็นฟังก์ชันเล็กๆ
‫แบบนี้ ซึ่งอ่านตรงไปตรงมากว่ามาก
‫มาดูวิธีการทำ refactor นี้กัน
‫ตกลง.
‫ดังนั้นเราจึงต้องการใส่เสียงเข้าไปในเกมของเรา และสถานที่ที่เราจะทำสิ่งนี้อยู่ในปืนเมื่อเราทำการยิง
‫นั่นคือพอร์ตการโทรแรก
‫ฉันคิดว่าเสียงช็อตที่ดีและเสียงกระทบจะดีมาก
‫ปัญหาเดียวคือเมื่อฉันกลับมาที่ฟังก์ชัน pull trigger ฉันสังเกตเห็นว่ามันมีขนาดใหญ่ผิดปกติ
‫มันไม่พอดีกับหนึ่งในหน้าจอของฉัน
‫นอกจากนี้ยังอ่านและทำความเข้าใจได้ยากว่าเราจะวางฟังก์ชันนี้ไว้ที่ใด
‫ดังนั้นในขณะที่เราพยายามทำความเข้าใจจริงๆ ว่าฟังก์ชันการทำงานคืออะไร บางทีมันอาจจะคุ้มค่าที่จะทำการปรับโครงสร้างใหม่อย่างรวดเร็ว
‫หรือดึงข้อมูลบางส่วนนี้ไปใช้วิธีการอื่นเพื่อไม่ให้อ่านยาก
‫ทีนี้ ถ้าคุณไปดูโค้ดนี้แล้วลองคิดดูว่าโค้ดนี้ใช้ทำอะไร คุณจะเห็นว่าส่วนใหญ่ของโค้ดนี้ถูกตั้งค่าไว้สำหรับสายงานของเรา
‫ติดตามส่วนนี้ทั้งหมดจากบรรทัดที่ 28 ลงไปที่ 43
‫และเรากำลังทำอะไรอยู่?
‫เรากำลังรับจำนำเจ้าของ จากนั้นเรากำลังตรวจสอบการรับคอนโทรลเลอร์ของเจ้าของ จากนั้นเราได้รับวิวพอร์ตจากสิ่งนั้น
‫จากนั้นเราจะได้ตำแหน่งสิ้นสุดตามช่วงสูงสุด
‫จากนั้นเราก็ส่งพารามิเตอร์ Hit บางอย่างเพื่อเพิกเฉยต่อสิ่งต่างๆ
‫ทั้งหมดนี้ถูกตั้งค่าสำหรับการติดตามบรรทัดของเรา ดังนั้นทำไมเราไม่แยกมันออกมาเป็นฟังก์ชันของมันเองที่นี่ล่ะ
‫ฉันจะสร้างฟังก์ชันส่วนตัวใหม่ที่ด้านล่าง
‫หลังจากตัวแปรของเรา มันจะเป็น bool return เพราะเราต้องการแทนที่การเรียกนี้ที่นี่ซึ่งส่งคืนความสำเร็จด้วยอันที่ให้ผลลัพธ์ของ
‫Hit แก่เราเช่นกัน
‫เราจะทำสิ่งนี้ในฐานะที่ผมจะเรียกฟังก์ชันการติดตามปืน และมันจะมีพารามิเตอร์ออกมาตรงนี้
‫กล่าวคือหนึ่งในนั้นจะเป็นผลการตี
‫ดังนั้นกดผลลัพธ์ เครื่องหมายและเพื่อให้เป็นข้อมูลอ้างอิง
‫และเนื่องจากไม่ใช่ค่าอ้างอิงคงที่ เราจึงรู้ว่ามันเป็นพารามิเตอร์ขาออก
‫เราเรียกสิ่งนี้ว่าการตี
‫และจริงๆ แล้ว อาจมีอีกอันที่เราต้องการที่นี่
‫กล่าวคือ ฉันสามารถเห็นได้ว่าเรามีการหมุนออกมาจากโค้ดส่วนนี้ และอันที่จริง เรากำลังปฏิเสธการหมุนนั้น
‫สิ่งที่เราสนใจจริงๆ คือ ทิศทางการยิง
‫บางทีนั่นอาจเป็นสิ่งที่เราต้องไป
‫ฉันจะสร้างพารามิเตอร์ F vector out, ดังนั้น F vector ampersand และมันจะเป็นทิศทางการยิง
‫นี่คือสองเอาท์พุตที่จะมาจากการติดตามปืนของเรา
‫ตอนนี้ ไปข้างหน้าและสร้างการใช้งานที่นี่
‫และสิ่งที่เราต้องการจะทำคือคัดลอกโค้ดทั้งหมดไปไว้ที่นั่น
‫ดูว่ามันไปอย่างไร
‫และเราต้องการตรวจสอบช็อตนี้ด้วย
‫ทิศทาง.
‫นำออกไปที่นั่นและติดไว้ก่อนที่จะสิ้นสุด
‫หรือบางทีที่นี่หลังจากที่เราได้วิวพอร์ตของผู้เล่นแล้ว เราสามารถกำหนดว่าทิศทางการยิงต้องเท่ากับด้านลบ
‫นั่นคือการหมุน
‫แต่สิ่งสำคัญที่ควรทราบคือเราต้องการตั้งค่าไม่ใช่ตัวแปรท้องถิ่น
‫ดังนั้นหากคุณใส่ประเภทที่นี่ มันจะกำหนดทิศทางการยิงในพื้นที่
‫เราต้องการลบสิ่งนั้นเพื่อกำหนดทิศทางการยิงในพารามิเตอร์ ซึ่งจริงๆ แล้วหมายถึงการตั้งค่าทิศทางการยิงที่เราจะส่งผ่านในฟังก์ชันที่เรียกมัน
‫กันไปสำหรับการตี
‫เราจำเป็นต้องลบ Hit ในพื้นที่นี้ เพื่อให้การตีที่ถูกส่งผ่านไปยังการติดตามบรรทัดทีละช่องเป็นการตีที่ส่งต่อไปยังการติดตามปืน
‫และสุดท้าย มีอะไรอีกบ้างที่ต้องทำบรรทัดนี้ ซึ่งตอนนี้ไม่จำเป็น และนี่คือความสำเร็จด้วยหรือไม่?
‫เราแค่ต้องส่งคืนผลลัพธ์ของสัญญาณการติดตามเส้นตามช่องสัญญาณ
‫นั่นเป็นไปได้ว่าการติดตามปืนของเราจะสำเร็จหรือไม่
‫ดังนั้นเราจึงทำให้การเยื้องนี้ลดลงเล็กน้อย
‫ตอนนี้เราใส่ทุกอย่างลงในหน้าจอเดียวได้แล้ว และเข้าใจได้ง่ายขึ้นนิดหน่อยว่า
‫ใช่ ทั้งหมดนี้เกี่ยวข้องกับการติดตามปืน
‫เราสามารถขึ้นไปที่ CP ปืนของเรา และตอนนี้เราสามารถตั้งค่าความสำเร็จ B ของเราที่นี่
‫ดังนั้นความสำเร็จของ bool B เราจะต้องตั้งค่าเป็นการติดตามปืนและเราต้องส่งพารามิเตอร์บางอย่างที่นี่
‫ดังนั้นเรายังคงต้องประกาศที่ไหนสักแห่งหากผลการตี
‫มันจะเป็นหนึ่งในนั้น
‫เดี๋ยวผมโทรไปตี..
‫และอีกอันจะเป็นเวกเตอร์ F ที่เรียกว่า ทิศทางการยิง
‫และกำลังจะผ่านเข้ามา
‫เราจะตีกันก่อน แล้วก็ทิศทางการยิง
‫แล้วเซมิโคลอนต่อท้ายตรงนั้น
‫นั่นจะทำให้ง่ายขึ้นนิดหน่อย
‫อย่างไรก็ตาม ฉันสังเกตเห็นว่าเราต้องการตัวควบคุมเจ้าของด้วย และฉันไม่ต้องการให้การติดตามปืนต้องรับผิดชอบต่อตัวควบคุมเจ้าของหรือลืมตัวควบคุมของเจ้าของ
‫ฟังดูเหมือนไม่ใช่หน้าที่ของการติดตามปืนที่จะทำอย่างนั้น
‫มันฟังดูโอเคที่จะโดน
‫ฟังดูโอเคที่จะได้ทิศทางการยิง
‫แต่ฉันจะวาดเส้นในการรับตัวควบคุมเจ้าของ
‫เพื่อการนั้น ผมจะใส่มันเข้าไป ใส่โค้ดทั้งหมดนี้ลงในฟังก์ชันอื่นที่ทั้งคู่สามารถเรียกได้
‫มันจะเป็นฟังก์ชันที่คืนค่าคอนโทรลเลอร์
‫ดาว.
‫และเราจะเรียกมันว่าตัวควบคุม และเราจะทำให้เป็นคอนเสิร์ตได้
‫อย่างที่เราทราบ มันไม่ได้หมายถึงการเปลี่ยนตัวแปรใด ๆ ในคลาสปืนของเรา
‫มาสร้างการใช้งานกัน
‫เพียงแค่นำการใช้งานจากการติดตามปืนเข้ามา แก้ไขการเยื้องหากจำเป็น แล้วเราจะดำเนินการต่อและเพียงแค่คืนการควบคุมของเจ้าของ
‫ดังนั้นจึงไม่จำเป็นต้องทำการตรวจสอบเป็นโมฆะที่นี่
‫การตรวจสอบค่าว่างที่เราต้องทำในฟังก์ชันที่กำลังใช้งานอยู่
‫ดังนั้นเราจะนำสิ่งนั้นมาไว้ที่นั่น
‫เราไม่จำเป็นต้องตั้งค่าตัวแปรในที่นี้ด้วย
‫เราสามารถไปข้างหน้าและกลับมา
‫มันจะค่อนข้างตรงไปตรงมา
‫ฉันได้รับตัวควบคุม แต่ไม่สมบูรณ์
‫จากนั้นเราจะตั้งค่าตัวแปรในการติดตามปืน
‫ดังนั้นเจ้าของผู้ควบคุมจะได้รับตัวควบคุมของเจ้าของเช่นนั้น
‫ซึ่งจากนั้นเราจะทำการคืนค่า null ให้เป็นค่า null ก่อนการกลับมาในการติดตามปืน ซึ่งอีกอย่าง มันจำเป็นต้องคืนค่าบูลีนเพราะการติดตามปืนเป็นการคืนค่าบูลีน
‫ดังนั้นเราจึงสามารถย้อนกลับและคืนค่าเท็จได้ที่นี่ เพราะถ้าเราไม่สามารถหาตัวควบคุมของเจ้าของได้ เราไม่สามารถติดตามปืนได้
‫ดังนั้นเราจึงไม่สามารถตีอะไรได้
‫จากนั้นเราก็ต้องการตัวควบคุมเจ้าของนั้นเพิ่มเติม
‫ที่ที่เรามีนักแสดงที่โด่งดังของเรา เรากำลังทำสิ่งนี้ได้รับความเสียหาย
‫และโดยพื้นฐานแล้ว สิ่งที่เราอยากทำที่นี่คือให้เจ้าของคอนโทรลเลอร์อยู่ในตัวนักแสดงยอดนิยมของเรา
‫ดังนั้นถ้าเราตีนักแสดง เราก็จะได้เจ้าของตัวควบคุมอีกครั้ง
‫ฉันรู้ว่ามีคนตามรอยปืนนิดหน่อย
‫รับคอนโทรลเลอร์แล้วเราจะทำอีกครั้งถ้าเราโดนนักแสดง
‫แต่นั่นจะเกิดขึ้นทุกครั้งที่เราไปพบนักแสดง
‫ดังนั้นฉันจึงไม่รังเกียจที่จะต้องคำนวณใหม่สองครั้ง เพราะมันจะทำให้โค้ดอ่านง่ายขึ้นเล็กน้อยโดยไม่ต้องเก็บตัวแปรและสถานะที่อาจไม่ซิงค์กัน
‫ดังนั้นคุณไป
‫ตอนนี้เรามีตัวควบคุมสำหรับเจ้าของที่เราต้องการสำหรับรับความเสียหาย และทริกเกอร์การดึงของเราดูดีขึ้นมาก
‫สำหรับการบรรยายครั้งนี้
‫หนึ่งอย่างรวดเร็ว
‫แค่ปรับโครงสร้างทริกเกอร์ดึงของเราใหม่เพื่อให้เรามีฐานที่ดีในการทำงานในการบรรยายครั้งต่อไป
‫แล้วเจอกัน
‫โอ้และดูเหมือนว่าฉันทำ booboo เล็กน้อยที่นี่ในตัวควบคุม get owner
‫หากคุณพยายามคอมไพล์ มันจะไม่ทำอะไรเลยเพราะค่าที่ส่งกลับนี้ไม่ได้ส่งคืนตัวชี้จริงๆ
‫ดังนั้นเราจึงต้องการคืนค่าตัวชี้ว่างในกรณีนี้ทันที
‫โดยทั่วไปเราไม่สามารถรับจำนำ จากนั้นเราไม่สามารถรับผู้ควบคุมได้
‫ดังนั้นเราจึงส่งคืนตัวชี้ค่าว่าง