‫สวัสดีและยินดีต้อนรับ.
‫การบรรยายนี้เราจะแสดงหน้าจอหลวม และเราจะทำมันทั้งหมดจากภายใน
‫C++ เพื่อสร้างวิดเจ็ตนั้น
‫มาดูวิธีทำกันเลยดีกว่า
‫ดังนั้นเราจึงต้องการแสดง UI บางส่วนเมื่อผู้เล่นของเราตายเพื่อบอกว่าเกิดอะไรขึ้นที่พวกเขาสูญเสียไปและระดับกำลังจะรีเซ็ต
‫จึงไม่แปลกใจสำหรับพวกเขา
‫ดังนั้น เราจะต้องสร้าง UI, วิดเจ็ต UI, UMG, วิดเจ็ตกราฟิกเคลื่อนไหวที่ไม่สมจริง
‫เรามาทำกันก่อนโดยสร้างโฟลเดอร์เพื่อเก็บ UI
‫และฉันรู้แล้วว่าเราจะมี UI สองรายการ ดังนั้นฉันคิดว่าฉันจะมีโฟลเดอร์ UI ที่นี่
‫จากนั้นเข้าไปที่นี่และคลิกขวาแล้วไป คุณควรทำสิ่งนี้มาก่อน แต่เดี๋ยวก่อน จะพาคุณผ่าน
‫เราจะไปที่ส่วนอินเทอร์เฟซผู้ใช้ จากนั้นเลือกพิมพ์เขียววิดเจ็ตและคำนำหน้าที่เราจะใช้คือขีดล่าง
‫WP จากนั้นหน้าจอจะเสีย
‫ตอนนี้คุณสามารถทำคลาสพื้นฐานสำหรับเนื้อหาประเภทนี้ใน C++ ได้ แต่เราจะไม่ครอบคลุมในส่วนนี้
‫โดยทั่วไปไม่จำเป็นต้องทำเช่นนั้น และการทำสิ่งนี้ใน Blueprint ทำได้ง่ายกว่ามาก
‫การทำใน C++ นั้นไม่มีประโยชน์อะไรมาก เว้นแต่คุณจะเป็น UI ที่มีความซับซ้อนขั้นสูงสุด
‫และคุณต้องการนำตรรกะของ UI นั้นไปไว้ใน C++
‫ในกรณีนั้น มันไม่ใช่อย่างนั้น ดังนั้นเราจึงสามารถใช้พิมพ์เขียวต่อไปได้
‫ท้ายที่สุด UI เป็นสิ่งที่มองเห็นได้
‫การใช้เครื่องมือภาพเพื่อประกอบเข้าด้วยกันเป็นเรื่องที่สมเหตุสมผล เพราะคุณรู้อยู่แล้วว่าจะสร้างวิดเจ็ตได้อย่างไร
‫ฉันจะให้สิ่งนี้เป็นความท้าทายให้คุณตั้งค่าหน้าจอเสีย
‫เราต้องการเพิ่มข้อความที่อธิบายว่าผู้เล่นแพ้และเรากำลังจะเริ่มต้นใหม่
‫ต้องการวางตำแหน่งข้อความนั้นไว้ตรงกลาง ทำให้มองเห็นได้ ตรวจสอบให้แน่ใจว่ามองเห็นได้ในเกม
‫และอย่างที่ฉันพูดไป อธิบายว่าจะมีการเริ่มต้นใหม่
‫และหลังจากที่คุณได้ลองทำความท้าทายนี้แล้ว เราจะมาดูกันว่าเราจะสามารถเรียกสิ่งนี้จาก C++ ได้อย่างไร
‫คุณเคยเห็นวิธีการทำสิ่งนี้ใน Blueprint มาก่อนแล้ว
‫เราจะมาดูกันว่าเราจะทำได้อย่างไรจากภายใน C++
‫หยุดวิดีโอชั่วคราวแล้วไปกันเลย
‫โอเค ยินดีต้อนรับกลับ
‫ฉันจะไปสร้างข้อความก่อน
‫ดังนั้นฉันต้องการมองหาในจานสีทางด้านซ้าย มองหารายการข้อความแล้วนำเข้ามา
‫ฉันจะเปลี่ยนให้คุณสูญเสียการเขียนบทสนทนาที่ตรงไปตรงมาและไร้จินตนาการที่นี่ และเราจะเปลี่ยนสีและความทึบและหรือลักษณะเป็นสีแดงเพื่อให้ชัดเจนว่าพวกเขาหายไป
‫และแค่ถูเข้าไปอีกหน่อย ฉันจะขยายแบบอักษรและเปลี่ยนขนาดให้ใหญ่ขึ้น
‫แล้วผมจะขยายกรอบรอบๆ ข้อความ และจัดกึ่งกลางข้อความ
‫ลงไปที่การให้เหตุผล ผมจะจัดกึ่งกลางบรรทัดที่ข้อความ
‫และถ้าฉันขยายออกไป ลองดูว่ามีที่อื่นที่ฉันจัดกึ่งกลางภายในโน้ตได้หรือไม่
‫ผมก็เลยไปทำขนาดกล่องให้เหมาะสมพอประมาณ จากนั้นผมก็จะขึ้นไปถึงการจัดตำแหน่ง
‫สมอ และอะไรประมาณนั้น
‫และฉันจะเลือกดรอปดาวน์สำหรับจุดยึด และเลือกพรีเซ็ตสำหรับจุดยึดตรงกลาง เพราะนั่นคือสิ่งที่ฉันต้องการทำ
‫ฉันต้องการตั้งค่าการจัดตำแหน่งเป็น 0 5 และ 0 5 ซึ่งโดยพื้นฐานแล้วหมายความว่าเรากำลังจัดตำแหน่งให้อยู่ตรงกลางของวัตถุมากกว่าที่มุมซ้ายบน
‫ฉันจะทำสมออีกครั้ง
‫ตกลง.
‫นั่นไม่ใช่ว่าไม่ได้ช่วยอะไรมาก
‫แล้วตำแหน่ง X ทำไมฉันถึงคิดว่าถ้าฉันแค่ตั้งตำแหน่งถัดจากศูนย์และศูนย์เพราะฉันตั้งจุดยึดไว้แบบนั้น
‫ตำแหน่งที่เสียไปของฉันจะไปอยู่ที่ไหนสักแห่งที่อยู่ตรงกลางและฉันจะย้ายมัน ขึ้นเล็กน้อยเลยทีเดียว
‫รักษาตำแหน่ง X ของฉันไว้ที่ศูนย์ ตำแหน่ง Y -50 เพราะฉันต้องการเพิ่มข้อความรองที่บอกว่าอันที่จริง มันอาจจะง่ายกว่าถ้าจะทำซ้ำข้อความอื่นที่นี่
‫เพราะมีการตั้งค่าทั้งหมดที่ฉันต้องการแล้ว
‫ฉันแค่อยากทำให้มันเล็กลงนิดหน่อย
‫วางตำแหน่งศูนย์อีกครั้งและฉันจะบอกว่าระดับจะเริ่มต้นใหม่ใน 5 วินาทีและฉันจะทำให้ขนาดตัวอักษรเล็กลงมาก
‫ดังนั้นมันจึงน้อยลงบนใบหน้าของคุณ อะไรแบบนี้ แล้วแค่เลื่อนลงมาเล็กน้อย รอยบากเล็กน้อย
‫แล้วรีเซ็ตตำแหน่ง X นั้นให้เป็นศูนย์ และพอใจ 100% กับตำแหน่งนั้น
‫ฉันแค่จะขยับมันให้สูงขึ้นอีกนิด
‫ถ้าฉันกด shift ค้างไว้ ฉันสามารถล็อคมันไว้ที่แกนที่ฉันกำลังเคลื่อนที่ด้วย เพื่อให้มันอยู่ตรงกลางไม่มากก็น้อยแบบนั้น
‫ตกลงดังนั้นฉันมีความสุขกับมัน
‫ตอนนี้เราต้องไปข้างหน้าและพยายามวางไข่สิ่งนั้น
‫เราจะทำอย่างนั้นได้อย่างไร?
‫ก่อนอื่น เราจำเป็นต้องรู้ว่าวิดเจ็ตคลาสใดที่เราควรจะวางไข่ และเราจำเป็นต้องรู้ว่าตอนนี้เราจะทำอะไรต่อจากนี้
‫อย่างที่ฉันได้กล่าวไปแล้ว ฉันคิดว่าสถานที่ที่ดีที่จะทำสิ่งนี้คือจากตัวควบคุมเครื่องเล่นเอง
‫และเราจำเป็นต้องรู้ในคอนโทรลเลอร์ของผู้เล่นว่าคลาสใด วิดเจ็ตคลาสใดที่เรากำลังพยายามวางไข่
‫ฉันรู้ว่ามันเป็นคลาสพิมพ์เขียว แต่เราก็ยังต้องการให้มันเป็นคลาสที่เราพยายามจะวางไข่
‫วิธีที่เราจะทำคือสร้างคุณสมบัติใหม่บนนี้ ซึ่งจะแก้ไขได้ทุกที่ และเราต้องการให้นี่เป็นคลาสย่อยของ
‫เพราะนี่เป็นวิธีที่ดีเสมอที่จะทำให้แน่ใจว่าเราได้รับใหม่ ระดับ.
‫โดยพื้นฐานแล้ว คุณสามารถใช้ประเภทที่คุณจัดคลาสได้หากต้องการ แต่นั่นไม่ได้จำกัดประเภทของคลาสที่เราสามารถใช้ได้
‫และที่นี่เราต้องการจำกัดให้คุณใช้วิดเจ็ตเท่านั้น
‫ถ้าคุณไปที่พิมพ์เขียวของคุณ คุณจะเห็นว่าเราไปที่ใดที่หนึ่งในนี้ คุณจะพบที่นั่น
‫คลาสผู้ปกครองใช้วิดเจ็ตที่เรารู้เมื่อคุณใส่คำนำหน้าจะกลายเป็นคุณใช้วิดเจ็ต
‫นี่จึงเป็นคลาสย่อยของ
‫แล้วเราใช้วงเล็บมุมของเราเป็น คุณใช้วิดเจ็ต และฉันจะประกาศต่อที่นี่ แทนที่จะรวมไว้
‫ดังนั้นคลาสที่คุณใช้วิดเจ็ต แล้วเราจะเรียกสิ่งนี้ว่าการแพ้
‫คลาสหน้าจอเพียงเพื่อให้ชัดเจนว่าเกิดอะไรขึ้นที่นั่น
‫ตอนนี้ฉันกำลังจะดำเนินการต่อและคอมไพล์ในขั้นตอนนี้ในขณะที่เราทำสิ่งต่อไปเพราะการคอมไพล์เมื่อเปลี่ยนไฟล์ส่วนหัวใช้เวลานานกว่านั้นเล็กน้อย
‫ที่จริงแล้วการคอมไพล์จะล้มเหลวในขั้นตอนนี้เพราะเรายังไม่ได้รวมโมดูล UMG
‫เราไม่รู้ว่าต้องทำอย่างไร
‫ไม่ต้องกังวลกับการคอมไพล์ในขั้นตอนนี้ และในวิดีโอประมาณ 9 นาที เราจะแก้ไขข้อผิดพลาดนี้
‫ตอนนี้ใน C ++ สิ่งที่เราจะทำคือวางวิดเจ็ตนั้นขึ้นมา
‫เราเลยอยากจะทำมันก่อนถึงเวลานั้นด้วยซ้ำ
‫มันไม่สำคัญหรอกเพราะตัวจับเวลาไม่รอ
‫มันแค่ตั้งเวลาแล้วตรงไปยังบรรทัดถัดไปของรหัส ดังนั้นเราจะไม่รอ 5 วินาทีหากเราทำสิ่งนี้โดยตรง
‫หากเราวางไข่ UI ทันทีหลังจากนั้น ไม่สำคัญจริงๆ ว่าเราจะทำสิ่งนี้ในลำดับใด ใน.
‫ดังนั้นสิ่งที่เราจะทำคือใช้ฟังก์ชันที่เรียกว่า create widget ซึ่งไม่สามารถใช้งานได้ในขณะนี้
‫ดังนั้นเราต้องแฮชรวมอะไรบางอย่างก่อน
‫และสิ่งที่เราจะรวมไว้คือวิดเจ็ตผู้ใช้สแลชพิมพ์เขียวไปข้างหน้า และนั่นคือคลาสที่เราต้องใช้เพื่อเข้าถึงฟังก์ชันสร้างวิดเจ็ตนี้
‫และโดยพื้นฐานแล้วเราจะบอกว่าสร้างวิดเจ็ต
‫มันจะต้องมีจริง ๆ แล้วเรามาดูกันว่าเราจะต้องจัดหาอะไรให้บ้าง
‫ฉันจะไปที่ F 12 เพื่อนำไปใช้
‫คุณจะเห็นว่ามันซับซ้อนเล็กน้อยที่จะเห็น แต่เรามีพารามิเตอร์เทมเพลตที่นี่ ซึ่งเป็นค่าเริ่มต้นที่คุณใช้วิดเจ็ต
‫ดังนั้นเราอาจไม่จำเป็นต้องระบุสิ่งนั้น
‫จากนั้นมีออบเจ็กต์ที่เป็นเจ้าของและคลาสที่เราต้องสร้าง จากนั้นชื่อวิดเจ็ตที่เราไม่จำเป็นต้องระบุ
‫จากนั้นจะส่งคืนเป็นตัวชี้ไปยังวิดเจ็ต
‫สิ่งที่ผมจะทำจริงๆคือในนี้ เราจะให้เจ้าของวัตถุ
‫ตอนนี้มีเพียงบางสิ่งเท่านั้นที่สามารถเป็นเจ้าของวิดเจ็ตได้
‫หนึ่งในนั้นคือส่วนควบคุมของผู้เล่น ดังนั้นเราจึงสามารถผ่านเข้าไปได้
‫จากนั้นสิ่งต่อไปคือเราต้องการส่งผ่านในคลาสย่อย RT ของคุณโดยใช้วิดเจ็ต
‫โชคดีที่เราได้กำหนดค่านั้นในไฟล์ส่วนหัวแล้ว ดังนั้นเราจึงสามารถส่งต่อเข้าไปได้ และฉันจะหยุดการเยื้องของฉันจากการพยายามแก้ไขตัวเองในขณะที่ฉันไม่ได้ใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัด
‫แล้วก็ไปดูกันเลยว่ามีอะไรอีกบ้าง
‫แค่นั้นแหละ.
‫มันเพิ่งส่งคืนวิดเจ็ต ณ จุดนี้
‫สิ่งที่เราทำได้คือมีตัวชี้ให้คุณ ใช้วิดเจ็ตสตาร์ และนี่จะเป็นหน้าจอที่เสียไป
‫ดังนั้นเราจึงมีคลาสเสียหน้าจอ
‫หลังจากที่เราสร้างวิดเจ็ตแล้ว มันจะกลายเป็นหน้าจอหลวมจริงๆ
‫สิ่งต่อไปที่เราต้องทำคือทำให้ UI นี้มองเห็นได้
‫เราทำเช่นนั้นโดยเพิ่มลงในวิวพอร์ตด้วยถ้อยคำที่ไม่จริง
‫แต่ก่อนอื่น เนื่องจากเราเพิ่มวิวพอร์ตโดยการเรียกใช้ฟังก์ชันบนหน้าจอสีน้ำเงิน เราจึงต้องตรวจสอบให้แน่ใจว่าไม่ใช่ตัวชี้ว่าง
‫แล้วถ้าหน้าจอเสียไม่เท่ากับ null pointer ทำไมมันถึงเป็น null pointer ล่ะ?
‫อีกอย่าง ความท้าทายเล็กๆ น้อยๆ ที่คุณจะได้เห็นหากคุณสามารถเข้าใจได้ว่าทำไมเราถึงลงเอยด้วยตัวชี้ค่าว่างที่นี่
‫เหตุผลหนึ่งคือบางทีเราลืมตั้งค่าคลาสหน้าจอเสีย
‫และถ้าเป็นกรณีนี้ และเราไม่มีชุดคลาสหน้าจอสีน้ำเงินที่ถูกต้อง สร้างวิดเจ็ตก็จะส่งคืนตัวชี้ว่างให้เรา
‫และเราไม่ต้องการให้เกิดขึ้น และเราไม่ต้องการเรียกใช้ฟังก์ชันบนตัวชี้ค่าว่างอย่างแน่นอน
‫ดังนั้นเราจะทำลูกศรหน้าจอหาย
‫แล้วสิ่งที่เราต้องการที่นี่คือฟังก์ชันที่เรียกว่าเพิ่มไปยังวิวพอร์ต
‫ซึ่งจะทำเพียงแค่นั้นไปและเพิ่มไปที่หน้าจอเพื่อให้เราเห็นหน้าจอที่หลวม
‫ตอนนี้ฉันกำลังจะดำเนินการต่อและรวบรวมสิ่งนั้นด้วย และเข้าไปในหนึ่งรีลและเปิดพิมพ์เขียวของเราสำหรับตัวควบคุมผู้เล่น
‫ดังนั้นตัวควบคุมผู้เล่นมือปืนที่นี่
‫และเราน่าจะเห็นตัวแปรที่ยังไม่ปรากฏขึ้นที่ไหนสักแห่งในนี้
‫บางทีฉันอาจมีข้อผิดพลาดในการสร้าง
‫ไปดูบันทึกข้อความกันเลย
‫ใช่ เราสามารถเห็นข้อผิดพลาดในการสร้างบางอย่างในที่นี้ กล่าวคือ สิ่งแปลก ๆ เหล่านี้เกี่ยวกับสัญลักษณ์ภายนอกที่หายไป
‫หากเรามีรูปลักษณ์เพียงเล็กน้อยที่พูดถึงคุณ ให้ใช้วิดเจ็ตที่ไม่พร้อมใช้งานในขณะนี้
‫หากคุณย้อนกลับไปดูการบรรยายก่อนหน้านี้ เราทราบดีว่าข้อผิดพลาดประเภทนี้มักจะเกิดขึ้นเมื่อเราขาดการพึ่งพาโมดูล
‫ดังนั้น ถ้าเราไปและเปิดเกมยิงแบบง่ายๆ ของเรา dot build dot CSS และฉันกำลังจะปิดเทอร์มินัลเพื่อเพิ่มพื้นที่อีกเล็กน้อย
‫คุณจะเห็นสิ่งที่เราต้องทำคือเพิ่มการพึ่งพาสาธารณะใหม่ที่นี่
‫ในตอนท้าย เราจะเพิ่มการพึ่งพาสาธารณะสำหรับ UMG ดังนั้นจุลภาคใหม่
‫จากนั้นในเครื่องหมายคำพูด เราจะใส่ UMG และนั่นทำให้เราสามารถใช้ประโยชน์จากการรวมที่เรามีที่นี่
‫วิดเจ็ตผู้ใช้ blueprint forward slash
‫สิ่งของทั้งหมดนั้นอยู่ในโมดูลที่แยกจากกันกับสิ่งของมาตรฐานที่รวมอยู่ด้วย
‫ดังนั้นเราจึงต้องไปบอก Unreal ว่าเราต้องการใช้โมดูลนั้นใน C ++ ของเรา
‫ไปข้างหน้าและสร้างและดูว่ามันทำงาน
‫ตอนนี้ดูประสบความสำเร็จ
‫หากเราเข้าไปที่เครื่องมือแก้ไขและกลับไปที่เกมยิงปืนของเรา เหตุผลบางอย่างที่ฉันไม่คิดว่ามีการโหลดซ้ำอย่างถูกต้อง
‫ดังนั้นฉันจึงต้องคอมไพล์ที่นี่ในตัวแก้ไข
‫เรากลับไปที่ตัวควบคุมผู้เล่นเกมยิงปืน
‫ในที่สุดคุณจะเห็นคลาสหน้าจอที่เสียไป
‫เราสามารถคลิกดรอปดาวน์ที่นั่นและเลือก AWP ขีดเส้นใต้หน้าจอเสียที่นั่น คอมไพล์
‫บันทึกแล้วไปฆ่ากันเอง
‫เราจะโดนยิงสองสามครั้ง
‫ปังปัง.
‫และที่นั่นคุณไป
‫หน้าจอ Lou ของเราปรากฏขึ้นเพื่อแจ้งให้เราทราบว่าระดับนั้นกำลังจะเริ่มต้นใหม่ในอีก 5 วินาที
‫และมันก็ทำ
‫มันทำ
‫ตอนนี้คุณไม่เพียงแต่รู้วิธีสร้างกราฟิก UMG เท่านั้น แต่ยังรู้วิธีที่คุณสามารถวางไข่เหล่านี้จาก C ++
‫มากกว่าจากพิมพ์เขียว
‫การบรรยายครั้งต่อไป เราจะมองในแง่ร้ายน้อยลงในสิ่งต่าง ๆ และลองดูว่าเราสามารถสร้างเงื่อนไขการชนะสำหรับเกมนี้ได้หรือไม่
‫ฉันจะไปพบคุณที่นั่น.