จะแนบสคริปต์ส่วนกลางใน Unity ได้ที่ไหน


14

เท่าที่ Iknow ใน Unity สคริปต์ทุกตัวจะต้องแนบกับวัตถุ แต่เกิดอะไรขึ้นกับสคริปต์ทั่วโลก ตัวอย่างเช่นในเกมที่คล้ายกับเตตริสที่ควรแนบออบเจ็กต์องค์ประกอบ spawner และสคริปต์ผู้เสนอญัตติหรือไม่ หรือองค์ประกอบควรจัดการการเคลื่อนไหวของมันสำหรับตัวเอง? มีวิธีปฏิบัติที่ดีที่สุดสำหรับปัญหานี้หรือไม่?

คำตอบ:


14

หากต้องการขยายคำตอบของ Tetrad ให้พิจารณาสคริปต์เช่นนี้:

public class GameSystem : MonoBehavior
{
  private GameSystem m_Instance;
  public GameSystem Instance { get { return m_Instance; } }

  void Awake()
  {
    m_Instance = this;
  }

  void OnDestroy()
  {
    m_Instance = null;
  }

  void Update()
  {
    // global game update logic goes here
  }

  void OnGui()
  {
    // common GUI code goes here
  }

  // etc.
}

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

ตอนนี้คุณสามารถเข้าถึงวัตถุทั่วโลกของคุณโดยใช้ GameSystem.Instance.blah () วิธีการจัดการเหตุการณ์มันถูกเรียกใช้โดยอัตโนมัติโดย Unity เนื่องจากมันมาจาก MonoBehavior และมีอยู่เป็นองค์ประกอบ คุณสามารถเพิ่มเขตข้อมูลที่อ้างถึงวัตถุเกมหรือส่วนประกอบอื่น ๆ และเชื่อมต่อในมุมมองลำดับชั้นวัตถุ Unity

ใช่นี่คือ "แปลก ๆ " ทั้งหมด มันอาจรู้สึกสกปรกเล็กน้อยที่จะต้องสร้างวัตถุ (ที่มีการแปลง) ซึ่งเป็นเพียงซิงเกิลระดับโลก นี่คือสิ่งที่ Unity ต้องการในการสร้างออบเจ็กต์ทั่วโลกที่ได้รับข้อความอัปเดตและจัดการได้ด้วยตัวแก้ไขคุณสมบัติของ Unity ที่เป็นค่าเริ่มต้น


ขอบคุณสำหรับคำตอบนี้ ฉันเห็นด้วยมันรู้สึกแปลก ๆ ! และคิดว่ามีข้อมูลน้อยมากที่ด้านนี้ของสิ่งต่าง ๆ บางทีคุณอาจแนะนำวัสดุการอ่านบางอย่างเกี่ยวกับวิธีการที่ดีที่สุดในการเข้าถึงคลาสประเภท 'ผู้จัดการ' เหล่านี้ในความสามัคคี?
UpTheCreek

@UpTheCreek: ฉันไม่รู้จริงๆเลย เราส่วนใหญ่คิดออกทั้งหมดในงานไม่กี่ปีที่ผ่านมา แต่โครงการปัจจุบันของเราอยู่ในเทคโนโลยีที่กำหนดเองดังนั้นฉันค่อนข้างล้าสมัยกับ Unity ปฏิบัติที่ดีที่สุดวันนี้ ขอโทษ
Sean Middleditch

3

เพียงสร้างวัตถุผู้จัดการที่คุณวางสคริปต์ไว้ อาจทำให้ตัวแปรคงที่สำหรับสคริปต์ที่คุณกำหนดไว้Awakeเพื่อให้คุณสามารถเข้าถึงได้ทั่วโลก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.