‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะดูตัวเลือกบางอย่างในต้นไม้พฤติกรรมของเรา เพื่อให้ฉันสามารถให้ศัตรูวิ่งเข้ามาหาฉันได้
‫และถ้าเขามองไม่เห็นฉัน เขาก็มาถึงสถานที่สุดท้ายที่ฉันรู้จัก โดยพื้นฐานแล้วไล่ตามพฤติกรรมสองอย่าง จากนั้น
‫พฤติกรรมการสอบสวน
‫มาดูกันว่าจะทำได้อย่างไร
‫การใช้ต้นไม้พฤติกรรม
‫ดังนั้นแม้ว่าพฤติกรรมการลาดตระเวนนี้จะเป็นประโยชน์อย่างยิ่ง แต่ก็ไม่ใช่พฤติกรรมแบบที่เราต้องการนำไปใช้จริงๆ
‫สิ่งที่เราอยากได้คือบางอย่างในบรรทัดต่อไปนี้
‫เมื่อเราเห็นผู้เล่น เราจะเข้าไปใกล้พวกเขาให้มากที่สุด
‫และเมื่อผู้เล่นหายไปจากสายตา เราก็พยายามย้ายไปยังตำแหน่งสุดท้ายที่ผู้เล่นรู้จักเพื่อค้นหาพวกเขา
‫และเมื่อเราใช้ตัวเลือกนั้นหมดแล้ว บางทีเราอาจจะกลับไปที่อื่น หรือบางทีเราแค่อยู่ที่นั่นตอนนี้
‫แล้วเราจะบรรลุเป้าหมายนี้ได้อย่างไร?
‫ในตอนนี้ เราไม่มีทางทำสิ่งนี้สำเร็จได้ด้วยลำดับของการกระทำ
‫เราจำเป็นต้องเลือกตามข้อมูลที่เรามี
‫เราต้องเลือกระหว่างว่าเราจะมองเห็นผู้เล่นหรือมองไม่เห็น ไม่ว่าเราจะมีตำแหน่งผู้เล่นที่รู้จักล่าสุดหรือไม่ก็ตาม
‫ในการทำเช่นนี้ เราจำเป็นต้องมีโหนดประเภทใหม่ในแผนผังพฤติกรรมที่เรียกว่าโหนดตัวเลือก
‫ดังนั้นหากเราคลิกขวาและดูคอมโพสิตของเรา หนึ่งในตัวเลือกที่มีคือตัวเลือก
‫ตอนนี้ตัวเลือกซึ่งตรงข้ามกับลำดับทำงานในลักษณะนี้
‫หากคุณมีงานจำนวนมากอยู่ใต้ตัวเลือก งานนั้นจะทำงานจนกว่างานแรกจะสำเร็จ
‫และโดยพื้นฐานแล้ว คาดหวังให้ทุกคนล้มเหลวจนกว่าจะสำเร็จ
‫ตอนนี้ลำดับทำสิ่งที่ตรงกันข้าม
‫มันทำงานทั้งหมดจนกว่าหนึ่งในนั้นจะล้มเหลว
‫เหตุใดจึงมีประโยชน์
‫เหตุใดจึงมีประโยชน์ที่ตัวเลือกเรียกใช้หนึ่งในนั้นและยังคงเป็นหนึ่งในตัวเลือกที่ประสบความสำเร็จ
‫เพราะโดยพื้นฐานแล้วเราต้องการให้มันเลือกตัวเลือกแรกที่เป็นไปได้
‫วิธีที่เรากำลังจะทำสิ่งนี้ไม่ได้เกิดจากการเรียกใช้งานจริงภายใต้ตัวเลือก
‫แต่เรียกใช้ลำดับภายใต้ตัวเลือก
‫ที่ระดับราก เราจะทำโหนดตัวเลือก
‫และด้านล่างนั้น ให้ย้ายลำดับนี้ไปข้างๆ แล้วสร้างลำดับอื่นๆ
‫เราจะมีซีเควนซ์หนึ่งอันตรงนี้ และสิ่งที่เราทำได้คือ เปลี่ยนชื่อซีเควนซ์จากการเป็นซีเควนซ์เป็นอย่างเชส
‫และจากนั้นเราก็เพิ่มซีเควนซ์อื่นตรงนี้ได้ ซึ่งจะอยู่ตามเส้น ของการสอบสวน
‫และนี่คือพฤติกรรมทั้งสองของเราโดยพื้นฐานที่เราต้องการให้สามารถเลือกได้
‫และเพื่อที่จะทำให้มันล้มเหลว เราสามารถเพิ่มสิ่งต่าง ๆ ไปยังโหนดที่เรียกว่ามัณฑนากร
‫ดังนั้น หากคุณคลิกขวาที่โหนดแล้วเพิ่มมัณฑนากร คุณจะเห็นว่ามีตัวเลือกมากมายที่นี่
‫และโดยพื้นฐานแล้วพวกมันจะเปลี่ยนวิธีการทำงานของโหนดนี้
‫จากนั้นพวกเขาก็สามารถทำได้หลายวิธี
‫ตัวอย่างเช่น เรามีการวนซ้ำแบบมีเงื่อนไขซึ่งช่วยให้คุณวนซ้ำการดำเนินการทั้งหมดอีกครั้งในลำดับได้หลายครั้งตามที่เงื่อนไขนี้ถูกต้อง
‫เรามีอย่างอื่นที่นี่ เช่น การตรวจสอบกรวย ซึ่งเกี่ยวกับการมองเห็นและสิ่งที่น่ารักอื่นๆ
‫เราได้เพียงลูปบริสุทธิ์
‫เรามีการจำกัดเวลา ดังนั้นมันเป็นกระป๋องที่มีเพียงเราเท่านั้นที่สามารถอยู่ภายในลำดับนี้ได้เป็นระยะเวลาหนึ่งเท่านั้น
‫โดยพื้นฐานแล้วมีหลายสิ่งที่ปรับเปลี่ยนพฤติกรรมของลำดับนี้
‫แต่ที่เราสนใจคือ กระดานดำ เพราะนี่คือสภาพของกระดานดำ
‫และอย่างที่คุณเห็นจากข้อความด้านล่าง ค่าเริ่มต้นคือบางอย่างที่สอดคล้องกับตัวแสดงเองหรือไม่
‫และหากไม่ได้ตั้งค่าไว้ โหนดนี้จะทำงานโดยอัตโนมัติและทุกอย่างที่อยู่ด้านล่างจะล้มเหลว ซึ่งหมายความว่าตัวเลือกของเราจะไปยังตัวเลือกที่สอง
‫ซึ่งกำลังตรวจสอบอยู่
‫ในกรณีนี้ เราต้องการเปลี่ยนสิ่งนี้จริงๆ
‫เราต้องการเปลี่ยนวิธีการทำงาน
‫ดังนั้นตำแหน่งผู้เล่นของเรา เราต้องการให้สิ่งนี้ถูกตั้งค่าเมื่อผู้เล่นมองเห็นได้เท่านั้น
‫จากนั้นเราต้องการเพิ่มตัวแปรใหม่ที่นี่อีกครั้ง เวกเตอร์ซึ่งจะเป็นตำแหน่งผู้เล่นที่รู้จักล่าสุด
‫และตำแหน่งผู้เล่นที่รู้จักล่าสุดเมื่อผู้เล่นมองเห็นได้จะเหมือนกัน
‫แต่เมื่อผู้เล่นล่องหน ตำแหน่งของผู้เล่นจะถูกยกเลิกการตั้งค่า และตำแหน่งของผู้เล่นที่รู้จักล่าสุดคือที่ที่เราอยากไป
‫ดังนั้นเราจึงสามารถทำได้โดยไปที่เงื่อนไขฐาน Blackboard ของเราและเพียงแค่เปลี่ยนเป็นแบบสอบถามเป็น
‫ใช่ ถูกตั้งค่าไว้ แต่สิ่งที่เราต้องการให้ตั้งค่าคือตำแหน่งของผู้เล่น
‫ดังนั้นหากมีการตั้งค่าตำแหน่งของผู้เล่น เราจะให้ Chase และเราจะให้ Chase โดยพื้นฐานแล้วเพียงแค่ย้ายไปยัง
‫และเราจะย้ายไปยังตำแหน่งของผู้เล่นเช่น
‫ตอนนี้เราไม่ได้ทำอะไรมากในลำดับนี้
‫ในความเป็นจริง คุณสามารถวางสภาพกระดานดำนี้ได้โดยตรงในขณะเดินทางเช่นกัน แต่เนื่องจากเราอาจต้องการทำอย่างอื่น
‫เช่น การถ่ายภาพ ฉันจะปล่อยให้มันเป็นลำดับสำหรับตอนนี้
‫แล้วเราก็มีการตรวจสอบนี้
‫การตรวจสอบโดยพื้นฐานแล้วจะทำการย้ายเช่นกัน แต่มันจะย้ายไปที่แทนที่จะย้ายไปที่ตำแหน่งของผู้เล่น
‫มันจะย้ายไปยังตำแหน่งผู้เล่นที่รู้จักล่าสุด
‫และคุณจะเห็นว่าเราไม่มีเงื่อนไขในเรื่องนั้น เพราะสิ่งนี้จะผ่านไปได้หากเงื่อนไขนี้ล้มเหลว
‫สิ่งสำคัญประการหนึ่งที่ควรทราบเกี่ยวกับเงื่อนไขของกระดานดำเหล่านี้คือ โดยค่าเริ่มต้น เมื่อเราตัดสินใจที่จะเริ่มดำเนินการโหนดนี้แล้ว
‫เราจะไม่ประเมินสิ่งนั้นใหม่
‫ดังนั้นถ้าด้วยเหตุผลบางอย่างที่เรามองไม่เห็นผู้เล่นในขณะที่เรากำลังเคลื่อนที่ไปยังตำแหน่งของผู้เล่นนั้น
‫เราจะพยายามไปที่นั่นต่อไป
‫ดังนั้นถ้าเราต้องการให้มันสามารถยกเลิกการทำงานของโหนดนี้ได้ ก็มีตัวเลือกสำหรับสิ่งนั้น
‫หากคุณไปที่ตัวควบคุมการไหล จะมีผู้สังเกตการณ์ที่แจ้งเตือนและอยู่ใต้ตัวควบคุมนั้น
‫ผู้สังเกตการณ์ยกเลิกในขณะที่ตั้งค่าเป็นไม่มี
‫แต่คุณสามารถเลือกจากสองตัวเลือก
‫คุณสามารถตั้งค่าได้เอง
‫นี่คือการบอกว่าถ้าเงื่อนไขนี้กลายเป็นเท็จในทันที ให้หยุดสิ่งที่คุณกำลังทำและประเมินตัวเลือกของคุณอีกครั้งแล้วดู
‫บางทีตอนนี้เราจำเป็นต้องทำการตรวจสอบ
‫หมายเหตุ ตัวเลือกอื่นที่นี่มีลำดับความสำคัญต่ำกว่า และคุณจะเห็นว่ามีการเปลี่ยนแปลงสิ่งที่เน้นที่นี่
‫มันบอกว่าถ้าจู่ๆ สภาพของกระดานดำกลายเป็นจริง ให้หยุดทุกอย่างที่เราทำและเริ่มดำเนินการตามเงื่อนไขการไล่ล่านี้
‫แล้วตัวเลือกสุดท้ายคือทั้งสองอย่าง
‫และนี่คือสิ่งที่เราต้องการ
‫โดยพื้นฐานแล้ว มันบอกว่าเงื่อนไขบนกระดานดำนี้ ถ้ามันเป็นจริง เราจะเริ่มดำเนินการตามลำดับนี้ทันที
‫หากกลายเป็นเท็จ เราจะหยุดดำเนินการทันทีหรือหยุดดำเนินการอย่างอื่นที่เกิดขึ้น
‫โดยพื้นฐานแล้วเราต้องการไปและทำทุกอย่างตามเส้นทางที่กำหนดโดยสภาพกระดานดำนี้
‫ดังนั้น หวังว่านั่นจะสมเหตุสมผลที่ผู้สังเกตจะยกเลิกการดำเนินการของสิ่งต่างๆ มิฉะนั้นจะรอจนกว่าการดำเนินการจะเสร็จสิ้นก่อนที่จะประเมินใหม่อีกครั้ง
‫จริงๆ ตอนนี้เราต้องการใช้ตำแหน่งการเล่นและตำแหน่งของผู้เล่นที่รู้จักล่าสุด เพราะตอนนี้ถ้าเราไปที่
‫C++ ของเราและให้พื้นที่เพิ่มขึ้นอีกหน่อย คุณจะเห็นว่าเราเป็นแค่ การตั้งค่าตำแหน่งผู้เล่นนี้ใน
‫Begin Play
‫ตามหลักการแล้ว เราจะทำเช่นนี้ทุกครั้งที่มีแนวสายตาสำหรับจำนำผู้เล่นของเรา ดังนั้นเราจึงสามารถยกเลิกการใส่เครื่องหมายรหัสแนวสายตาของเราได้ที่นี่
‫และเราอาจต้องการยกเลิกการใส่ความคิดเห็นในโค้ดอื่นด้วย
‫แต่ในกรณีนี้ ไม่ใช่ว่าจะเป็นการเคลียร์โฟกัสและหยุดการเคลื่อนไหวโดยตรง
‫ฉันสามารถดำเนินการต่อและลบสิ่งเหล่านี้ได้ทั้งหมดเพราะ
‫นั่นไม่ใช่วิธีที่เรากำลังทำสิ่งต่างๆ อยู่ในขณะนี้
‫สิ่งที่เราอยากทำ ถ้าฉันลบโค้ดออก ก็คือเราต้องการที่จะอยู่ที่นี่เพื่อกำหนดตำแหน่งของผู้เล่น
‫นอกจากนี้เรายังต้องการตั้งค่าตำแหน่งสุดท้ายที่รู้จักที่นั่น และในที่อื่นๆ เราต้องการล้างตำแหน่งของผู้เล่น
‫ในการทำเช่นนั้น เรามีฟังก์ชันให้เราใช้แทนค่าที่ตั้งไว้เป็นเวกเตอร์ หากเราเปิดส่วนประกอบกระดานดำของเรา
‫มีค่าที่ชัดเจน และนี่ก็แค่ใช้ชื่อ f เท่านั้น ไม่ต้องการ เพื่อใช้ประเภทหรืออะไรก็ได้หรือเพราะเราเพียงแค่ลบสิ่งที่อยู่ในตัวแปรนั้นอย่างสมบูรณ์
‫ต่อไปนี้ ฉันมีคำท้าให้คุณกรอกชุดเครื่องหมายของเรา
‫ตัวแปรสองตัวเมื่ออยู่ในแนวสายตา โดยพื้นฐานแล้ว ให้กรอกบิตแรกของคำสั่ง
‫if แล้วล้างตำแหน่งของผู้เล่นเมื่อเรามี alt
‫ดังนั้นเมื่อเราสูญเสียสายตา เราก็ไม่มีตำแหน่งผู้เล่นอีกต่อไป
‫ลดความเร็วของศัตรูที่อยู่ในโลกเพื่อให้คุณสามารถหนีจากเขาได้ง่ายขึ้น
‫จากนั้นตรวจสอบการทำงาน ตรวจสอบว่าคุณสามารถซ่อนอยู่หลังมุมหนึ่ง และเขาไปที่ตำแหน่งสุดท้ายที่รู้จักเพื่อพยายามหาคุณ
‫หยุดวิดีโอชั่วคราวและไปที่นี้
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫ลองมาลองดูกัน
‫ก่อนอื่น เรากำลังตั้งค่าตำแหน่งการเล่น
‫ฉันจะย้ายมันออกจากเริ่มเล่นและย้ายมันมาที่นี่แทน
‫ดังนั้นเราจะกำหนดตำแหน่งของผู้เล่นเพื่อให้จำนำผู้เล่นที่นี่และทำเครื่องหมายอีกครั้ง
‫ดังนั้นฉันจะยกเลิกการใส่ความคิดเห็นในบรรทัดนั้น แล้วเราก็ทำสิ่งเดียวกันทุกประการ โค้ดบรรทัดเดียวกันทุกประการสำหรับตำแหน่งผู้เล่นที่รู้จักล่าสุดของเราที่นี่
‫ไปที่กระดานดำของเรา และทำให้แน่ใจว่าเราคัดลอกมัน เพื่อให้ได้ชื่อเดียวกันทุกประการ จากนั้นเราแค่ต้องการชัดเจนว่าสิ่งสุดท้ายคือการล้างตำแหน่งผู้เล่นของเราที่นี่
‫มันจะเป็นค่าที่ชัดเจน และจะใช้ตำแหน่งของโปรแกรมเล่นข้อความนี้เป็นค่าที่เราพยายามจะล้างในตอนท้าย
‫และเราสามารถดำเนินการต่อและรวบรวมและดูว่าใช้งานได้หรือไม่
‫คอมไพล์ก็ประสบความสำเร็จ
‫อีกสิ่งหนึ่งที่ฉันบอกให้ทำเพื่อทำให้การดีบักของเราง่ายขึ้นคือการเลือกศัตรู และเราสามารถไปเปลี่ยนความเร็วของพวกมันได้โดยไปที่องค์ประกอบการเคลื่อนที่ของพวกมัน
‫และค้นหาการเดินและค้นหาความเร็วของพวกมัน
‫ดังนั้น Max Walk speed จึงเป็น 600 ที่นี่
‫ให้ตั้งไว้ที่ 400 เพื่อให้เราหนีจากพวกมันได้ง่าย
‫พวกเขาจะเดินช้าหน่อยและไปเล่นต่อ
‫พวกเขากำลังเดินมาหาเราอย่างช้าๆ
‫เราสามารถหนีไปได้
‫เราซ่อนตัวอยู่หลังมุมและที่นี่พวกเขามาหาเราทุกครั้ง
‫แต่หวังว่าถ้าเราซ่อนตัวอยู่หลังมุมสองมุม พวกเขาจะไม่พบเรา
‫ฉันก็เลยซ่อน ซ่อนที่นี่ ซ่อนที่นี่
‫และเขาจะไปสำรวจสถานที่สุดท้ายที่รู้จัก คุณเห็นไหม เขาแค่เอาหัวไปจิ้มที่มุมถนน
‫แต่แล้วเขาก็ติดอยู่ตรงนั้นเพราะเขาไม่รู้ว่าต้องทำอย่างไร
‫และถ้าเราจะไปดูแผนผังพฤติกรรมของเรา แล้ววางสิ่งนี้ไว้ข้างหนึ่งและอีกเกมหนึ่ง
‫และให้พื้นที่ตัวเองบ้าง
‫แล้วถ้าเราดูที่แผนผังพฤติกรรม เราจะเห็นว่ามันเป็นแนวแจ๊สแถวๆ นี้ เพราะมันทำอย่างใดอย่างหนึ่งไม่ได้
‫กำลังพยายามย้ายไปยังตำแหน่งสุดท้ายที่ทราบซึ่งทำได้สำเร็จ
‫มันเลยติดขัดนิดหน่อย
‫แต่ถ้าฉันเข้ามาดู คุณจะเห็นว่าเขากำลังเคลื่อนเข้ามาหาฉัน
‫ถ้าเขามองไม่เห็นฉัน เขาก็ไปที่เงื่อนไขการสอบสวน
‫เลยเสียสายตาไป
‫เขากำลังจะสอบสวน
‫แล้วเขาก็มาเห็นฉัน แล้วเขาก็กลับไปไล่ตามฉัน
‫ดังนั้นพฤติกรรมนี้จึงได้ผลจริง
‫ตอนนี้เราสามารถเลือกได้ระหว่างพยายามไล่ตามและพยายามตรวจสอบตามพฤติกรรมของกระดานดำนี้
‫มาเปลี่ยนชื่อกระดานดำนี้เป็นพฤติกรรมที่นี่เพื่อดูเครื่องหมายคำถามของผู้เล่น
‫ดังนั้นจะอ่านง่ายกว่ามาก
‫ตอนนี้เราได้ตัวเลือกนี้แล้ว ที่สามารถเห็นผู้เล่น จากนั้นเราควรไล่ตาม ไม่เช่นนั้น
‫เราควรตรวจสอบและเราสามารถลบลำดับนี้ตรงนี้ได้ เพราะนั่นไม่ได้ใช้งานแล้ว
‫หวังว่าตอนนี้คุณคงเข้าใจมากขึ้นว่าต้นไม้พฤติกรรมสามารถเชื่อมโยงเข้าด้วยกันได้อย่างไรเพื่อสร้างทางเลือกและลำดับ
‫และรวมงานจำนวนมากเข้าด้วยกันเพื่อทำให้พฤติกรรมที่ซับซ้อนมากขึ้นได้ง่ายมาก
‫ในการบรรยายครั้งต่อไป เราจะมาดูว่าเราจะสร้างงานที่กำหนดเองใน C++ ได้อย่างไร เพื่อที่เราจะสามารถดำเนินการถ่ายทำได้
‫แล้วพบกันใหม่ในวิดีโอหน้าครับ