การทำความเข้าใจ Prefabs และ Instantiation

การสร้างอินสแตนซ์และทำลายสิ่งของถือเป็นสิ่งสำคัญมากในระหว่างการเล่นเกม การสร้างอินสแตนซ์หมายถึงการนำไปสู่การดำรงอยู่ ไอเท็มปรากฏขึ้นหรือ "วางไข่" ในเกมศัตรูตายองค์ประกอบ GUI หายไปและฉากต่างๆจะโหลดตลอดเวลาในเกม การรู้วิธีกำจัดสิ่งของที่ไม่จำเป็นอย่างถูกต้องและวิธีการนำสิ่งของที่คุณทำเข้ามานั้นมีความสำคัญมากยิ่งขึ้น

ก่อนอื่นให้เราเข้าใจว่าอะไร prefabsคือ. Prefabs ถือเป็นสิ่งสำคัญในการทำความเข้าใจว่า Instantiation ทำงานอย่างไรใน Unity

Prefabs เป็นเหมือน blueprintsของ GameObject รูปแบบสำเร็จรูปคือในทางหนึ่งcopyของ GameObject ที่สามารถทำซ้ำและใส่ลงในฉากได้แม้ว่าจะไม่มีอยู่ในขณะที่กำลังสร้างฉากก็ตาม กล่าวอีกนัยหนึ่งพรีแฟ็บสามารถใช้เพื่อdynamically generate GameObjects.

ในการสร้างรูปแบบสำเร็จรูปคุณเพียงแค่ลาก GameObject ที่ต้องการจากลำดับชั้นฉากของคุณไปยังโปรเจ็กต์ Assets.

ตอนนี้เพื่อสร้างอินสแตนซ์ GameObject เราเรียกไฟล์ Instantiate()วิธีการในสคริปต์ของเรา วิธีนี้กำหนดไว้ในMonoBehaviourใช้ GameObject เป็นพารามิเตอร์ดังนั้นจึงรู้ว่า GameObject ใดที่จะสร้าง / ทำซ้ำ นอกจากนี้ยังมีการลบล้างต่างๆสำหรับการเปลี่ยนการแปลงของอ็อบเจ็กต์ที่สร้างอินสแตนซ์ใหม่ตลอดจนการเลี้ยงดู

ให้เราลองสร้างไฟล์ hexagon เมื่อใดก็ตามที่ Space กดปุ่ม

สร้างสคริปต์ใหม่ชื่อ Instantiatorและเปิดขึ้น ในUpdate วิธีการพิมพ์รหัสที่ระบุด้านล่าง

ที่นี่เรากำลังใช้ไฟล์ GetKeyDown วิธีการของ Inputคลาสเพื่อตรวจสอบว่าผู้เล่นกดปุ่มใดปุ่มหนึ่งในเฟรมสุดท้ายหรือไม่ เนื่องจากเราต้องการให้ตรวจสอบอยู่เสมอเราจึงใส่เข้าไปUpdateซึ่งทำงาน 60 ครั้งต่อวินาที วิธี GetKeyDown ส่งกลับtrue หากคีย์ที่ระบุโดย KeyCode enum (ซึ่งแสดงรายการคีย์ที่เป็นไปได้ทั้งหมดบนแป้นพิมพ์มาตรฐาน) ถูกกดในเฟรมนั้น

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

การประกาศ GameObject สาธารณะที่ด้านบนจะสร้างช่องที่คล้ายกับที่เราสร้างขึ้นสำหรับ Rigidbody2D ในบทเรียนก่อนหน้าของเรา ช่องนี้ยอมรับเท่านั้นprefabs (ในเวลาบรรณาธิการ) และ gameObjects (ในรันไทม์) อย่างไรก็ตาม

บันทึกสคริปต์และปล่อยให้คอมไพล์ เมื่อเสร็จแล้วให้สร้างใหม่empty GameObject โดยไปที่เมนูลำดับชั้นของออบเจ็กต์คลิกขวาแล้วเลือก Create Empty.

ตั้งชื่อวัตถุนี้ให้เป็นที่รู้จักเช่น Instatiator Objectและแนบสคริปต์ที่สร้างขึ้นใหม่ของเราเข้าไป ในช่องที่ปรากฏขึ้นสำหรับ GameObject ให้ลากในรูปแบบสำเร็จรูปที่เราสร้างขึ้น

หากเราเล่นเกมตอนนี้การกด Spacebar จะเป็นการสร้างวัตถุ Hexagon ใหม่ที่เหมือนกับวัตถุที่เราใช้ในการสร้างรูปแบบสำเร็จรูป คุณสามารถเห็นแต่ละหกเหลี่ยมที่สร้างขึ้นในลำดับชั้นของวัตถุ สาเหตุที่คุณไม่เห็นพวกเขาปรากฏในเกมเป็นเพราะในขณะนี้พวกเขาทั้งหมดถูกสร้างขึ้นexactly อีกอันหนึ่ง

ในบทเรียนต่อไปเราจะเข้าใจแนวคิดเรื่องการทำลายวัตถุ