ایک منظر شامل کریں

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

تصدیق کا ماحول

Windows
  • ونڈوز 11
یونٹی ایڈیٹر
  • 2020.3.25f1
ان پٹ سسٹم پیکیج
  • 1.2.0

اس ٹوٹکے کے لئے ضروری شرائط

مندرجہ ذیل ترتیبات اس ٹپ کی وضاحت کے لئے بنیاد کے طور پر پیشگی بنائی گئی ہیں۔

ایک منظر شامل کرنے کے بارے میں

اتحاد آپ کو ایک ہی وقت میں متعدد مناظر دکھانے کی اجازت دیتا ہے۔ اسے اس وقت استعمال کریں جب آپ صرف مناظر کو اوورلے کرنا چاہتے ہیں یا اپنی ڈرائنگ کو کسی مختلف ساخت میں برآمد کرنا چاہتے ہیں۔

اس بار ، میں منظر کے سپرامپوزڈ ڈسپلے کی وضاحت کرنا چاہتا ہوں یہ فرض کرتے ہوئے کہ مینو اسکرین پیش منظر میں ظاہر ہوتی ہے جب کھیل چل رہا ہوتا ہے جبکہ گیم چل رہا ہوتا ہے۔

ایک سے زیادہ مناظر دکھاتے وقت، آپ کو مندرجہ ذیل سے آگاہ ہونا چاہئے:

  • ایک سے زیادہ ایونٹ سسٹم نہیں ہونا چاہئے
  • ایک سے زیادہ آڈیو سننے والا نہیں ہونا چاہئے
  • ایک سے زیادہ کیمروں کو سنبھالتے وقت محتاط رہیں

منظر تیار کریں

اس بار، ہم دو مناظر تیار کریں گے. چلو ، اور SampleSceneParentجو منظر SampleSceneChild مزید دکھایا جانا ہے وہ یہ ہے۔ دو مناظر کی تیاری کا طریقہ پچھلے نکات کی طرح ہی ہے ، لہذا براہ کرم ان کا حوالہ دیں۔

اس بار ، ہم مندرجہ ذیل ترتیب بنائیں گے۔ اگر آپ والدین کے منظر میں بٹن پر کلک کرتے ہیں تو ، بچے کا منظر شامل کرنے کے علاوہ کوئی مسئلہ نہیں ہے۔ اور اسپرائٹس ان علامات کو سمجھنے میں آسان بنانے کے لئے رکھے گئے Canvas ہیں جو آپ بعد میں دیکھیں گے۔

SampleSceneParent

SampleSceneChild

جب متعدد مناظر دکھائے جاتے ہیں تو ، اشیاء کا سیاق و سباق ہر شے کے "پرت ترتیب" پر منحصر ہوتا ہے ، چاہے وہ منظر یونٹ سے قطع نظر ہو۔ چونکہ ابتدائی قدریں تمام 0 ہیں ، لہذا نمبر اور اسپرائٹس کو "1" پر سیٹ کریں SampleSceneChild Canvas ۔

بلڈ سیٹنگز میں دو مناظر سیٹ کرنا مت بھولنا۔

پروسیسنگ کے مناظر

یہ کوڈ میں اسی طرح پروسیس کیا جاتا ہے جیسے مناظر کو تبدیل کرنا۔ اس بار بھی ، جب بٹن پر کلک کیا جاتا ہے تو اس پر عمل کیا جاتا ہے ، لیکن اسے منظر سوئچ کے بجائے اضافے کے طور پر پروسیس کیا جاتا ہے۔

اسکرپٹ فائل کا نام من مانی ہے ، لیکن یہاں SceneAdd یہ ہے۔

اسکرپٹ اس طرح نظر آتا ہے:

using UnityEngine;
using UnityEngine.SceneManagement;  // 追加

public class SceneAdd : MonoBehaviour
{
  /// <summary>ボタンをクリックしたときに呼ばれます。</summary>
  public void OnClick()
  {
    // 指定したシーンを追加します
    SceneManager.LoadScene("SampleSceneChild", LoadSceneMode.Additive);
  }
}

مناظر تبدیل کرتے وقت، LoadSceneMode میں نے سیٹ کیا ، Single لیکن اس بار Additive ایسا ہے۔ فرق صرف اتنا ہی ہے.

اسکرپٹ کو محفوظ کرنے کے بعد SampleSceneParent ، اسے منسلک کریں۔ EventSystem

بٹن پر طریقہ سیٹ کریں OnClick ۔

کھیل کو چلانے کی کوشش کریں کہ یہ کیسے کام کرتا ہے۔ اگر آپ بٹن پر کلک کرتے ہیں تو ، آپ کو بچے کا منظر نظر آئے گا۔

اس کے علاوہ ، اگر آپ درجہ بندی کو دیکھتے ہیں تو ، آپ دیکھ سکتے ہیں کہ دو مناظر ہیں۔

تاہم ، اس حقیقت کے باوجود کہ منظر شامل کیا گیا ہے ، ایسا لگتا ہے کہ والدین کے منظر کے کینوس کے مندرجات ظاہر نہیں کیے گئے ہیں۔ اس کے برعکس ، آپ دیکھ سکتے ہیں کہ والدین کے منظر میں اسپرائٹس پرتوں کی ترتیب کے مطابق پچھلی طرف دکھائے جاتے ہیں۔

نیز ، اگر آپ کنسول کو دیکھتے ہیں تو ، آپ دیکھ سکتے ہیں کہ لاگ مسلسل آؤٹ پٹ ہیں۔

مواد مندرجہ ذیل دو نکات ہیں.

  • منظر میں 2 واقعات کے نظام موجود ہیں. براہ کرم اس بات کو یقینی بنائیں کہ منظر میں ہمیشہ بالکل ایک واقعہ کا نظام موجود ہو۔
  • منظر میں 2 آڈیو سامعین موجود ہیں۔ براہ کرم اس بات کو یقینی بنائیں کہ منظر میں ہمیشہ بالکل ایک آڈیو سننے والا موجود ہو۔

متعدد مناظر کا استعمال کرتے وقت ، ان دو نکات اور کیمرے سے مطابقت رکھنا ضروری ہے۔

ایونٹ سسٹم کی غلطیوں کو ٹھیک کریں

لاگ کے مندرجات درج ذیل ہیں۔

منظر میں 2 واقعات کے نظام موجود ہیں. براہ کرم اس بات کو یقینی بنائیں کہ منظر میں ہمیشہ بالکل ایک واقعہ کا نظام موجود ہو۔

(منظر میں دو واقعات کے نظام ہیں. اس بات کو یقینی بنائیں کہ آپ کے منظر میں ہمیشہ ایک واقعہ کا نظام موجود ہے)

جیسا کہ لکھا گیا ہے ، ایونٹ سسٹم کو ایک حل میں ملانے سے مسئلہ حل ہوجائے گا۔

SampleSceneParent فرض کیا جاتا ہے کہ ہمیشہ موجود ہے ،SampleSceneChild لہذا جب آپ اسے کھولتے ہیں تو EventSystem اسے حذف کریں۔

یقینا ، براہ کرم نوٹ کریں کہ اگر آپ خود سے چلتے ہیں تو ،SampleSceneChild یو آئی جیسے بٹن کام نہیں کریں گے۔

آپ دیکھ سکتے ہیں کہ جب آپ اسے چلاتے ہیں تو ایونٹ سسٹم لاگ غائب ہوگئے ہیں۔

SampleSceneParent نیز ، چونکہ موجود ہے ، بچے کے منظر میں بٹن کو چالو کیا جاسکتا ہےEventSystem۔

آڈیوListeners کی غلطیوں کو ٹھیک کریں

لاگ کے مندرجات درج ذیل ہیں۔

منظر میں 2 آڈیو سامعین موجود ہیں۔ براہ کرم اس بات کو یقینی بنائیں کہ منظر میں ہمیشہ بالکل ایک آڈیو سننے والا موجود ہو۔

(منظر میں دو آڈیو سننے والے موجود ہیں۔ اس بات کو یقینی بنائیں کہ ہر وقت منظر میں صرف ایک آڈیو سننے والا موجود ہو۔ )

Main Camera اگر آپ اس کے اجزاء کو دیکھتے ہیں تو ، آپ یقینی طور پر دیکھ سکتے ہیں کہ آڈیو سننے والا موجود ہے ، لہذا SampleSceneChild آپ آڈیو سننے والے کو حذف کرسکتے ہیں۔ یہ اگلے آئٹم کے کیمرہ کنٹرول کے ذریعہ حل کیا جا سکتا ہے، لہذا ہم وہاں اس سے نمٹیں گے.

اگر آپ کیمرہ رکھنا چاہتے ہیں تو ،SampleSceneChild آپ اس آڈیو سننے والے کو حذف کردیں گے۔

دو مناظر دکھانے کے لئے کیمرہ تبدیل کریں

جہاں تک اس وجہ کا تعلق ہے کہ بچے کا منظر شامل کرتے وقت صرف بچے کے منظر کا کینوس دکھایا جاتا ہے، اس کی وجہ یہ ہے کہ وہاں دو کیمرے ہیں ، والدین کا منظر اور بچے کا منظر کینوس پر سیٹ کیا گیا ہے ، اور صرف ایک کیمرہ دکھایا گیا ہے۔

اس کا حل یہ ہے کہ والدین کے منظر کے کیمرے کے ساتھ دونوں مناظر کے کینوس کو ظاہر کیا جائے۔ عمل یہ ہے کہ بچے کے منظر کے کینوس پر موجود کیمرے کو بچے کے منظر کو شامل کرنے کے بعد والدین کے منظر کے کیمرے سے تبدیل کیا جائے۔

چلو ایک اسکرپٹ بنائیں۔ نام من مانی ہے، لیکن اس معاملے ChildSceneCamera میں یہ ہے.

اسکرپٹ اس طرح نظر آتا ہے: Canvas یہ منسلک کرنے کے لئے ایک ضروری عمل ہے.

using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;

public class ChildSceneCamera : MonoBehaviour
{
  /// <summary>シーンに追加されたタイミングで処理されます。</summary>
  void Awake()
  {
    // 親のシーンのキャンバスを取得
    var parentScene = SceneManager.GetSceneByName("SampleSceneParent");
    var parentCanvas = parentScene.GetRootGameObjects().First(obj => obj.GetComponent<Canvas>() != null).GetComponent<Canvas>();

    // 子のシーンのキャンバスを取得
    var childCanvas = GetComponent<Canvas>();

    // 子のシーンのカメラを削除
    Object.Destroy(childCanvas.worldCamera.gameObject);

    // 子のシーンのキャンバスのカメラを親のシーンのカメラに置き換えます
    childCanvas.worldCamera = parentCanvas.worldCamera;
  }
}

Awake یہ طریقہ پہلی بار اس وقت نافذ کیا جاتا ہے جب منظر میں آبجیکٹ موجود ہوتی ہے۔ Start طریقہ کار سے پہلے عمل درآمد کرتا ہے. یہ یاد رکھنا اچھا ہے کہ آپ اکثر اسے استعمال کرتے ہیں. اس بار، یہ فرض کیا گیا ہے کہ جب بچے کا منظر شامل کیا جائے گا تو اس پر عمل درآمد کیا جائے گا.

/// <summary>シーンに追加されたタイミングで処理されます。</summary>
void Awake()
{
  // 処理
}

کیمرے کو تبدیل کرنے کے لئے والدین کے منظر کا کینوس اور بچے کے منظر کا کینوس حاصل کریں۔ ایسا کرنے کے مختلف طریقے ہیں ، لیکن یہ بنیادی موضوع نہیں ہے ، لہذا آپ سوچ سکتے ہیں کہ اگر آپ اسے فی الحال اس طرح کرتے ہیں تو آپ اسے حاصل کرسکتے ہیں۔

// 親のシーンのキャンバスを取得
var parentScene = SceneManager.GetSceneByName("SampleSceneParent");
var parentCanvas = parentScene.GetRootGameObjects().First(obj => obj.GetComponent<Canvas>() != null).GetComponent<Canvas>();

// 子のシーンのキャンバスを取得
var childCanvas = GetComponent<Canvas>();

سب سے پہلے بچے کے منظر کے کیمرے Object.Destroy کو تباہ کریں۔ یہاں تک کہ اگر یہ چلا بھی جاتا ہے تو ، کوئی مسئلہ نہیں ہے کیونکہ اسے والدین کے منظر کے کیمرے سے کور کیا جاسکتا ہے۔ حذف کرنے کا ہدف Canvas.worldCamera یہاں سے حاصل کیا جاتا ہے۔ یہ صرف اس لئے ہے کیونکہ وہی کیمرہ جو اس وقت منظر میں ہے سیٹ ہے اور آسانی سے حاصل کیا جاسکتا ہے۔ اگر آپ واقعی اسے حذف کرنا چاہتے ہیں تو ، بہتر ہوگا کہ آپ منظر سے کیمرہ حاصل کریں۔

// 子のシーンのカメラを削除
Object.Destroy(childCanvas.worldCamera.gameObject);

آخر میں ، بچے کے منظر Canvas.worldCamera کو والدین کے کیمرے سے تبدیل کردیا جاتا ہے۔

// 子のシーンのキャンバスのカメラを親のシーンのカメラに置き換えます
childCanvas.worldCamera = parentCanvas.worldCamera;

اسکرپٹ کو محفوظ کرنے کے بعد SampleSceneChild ، اسے منسلک کریں۔ Canvas

یہ ٹھیک ہے اگر بچے کے منظر کو انجام دینے اور شامل کرنے کا نتیجہ نیچے دیئے گئے اعداد و شمار میں دکھایا گیا ہے۔ اس بات کو یقینی بنائیں کہ کوئی لاگ بھی نہیں ہے۔