Szcenárió hozzáadása

Oldal frissítve :
Oldal létrehozásának dátuma :

Ellenőrzési környezet

Windows
  • Windows 11 esetén
Unity-szerkesztő
  • 2020.3.25f1
Bemeneti rendszercsomag
  • 1.2.0

A tipp előfeltételei

A következő beállításokat előre elvégeztük a tipp leírásának előfeltételeként.

Szcenárió hozzáadása

A Unity lehetővé teszi, hogy egyszerre több jelenetet jelenítsen meg. Akkor használja, ha egyszerűen csak át szeretné fedni a jeleneteket, vagy exportálni szeretné a rajzokat egy másik textúrába.

Ezúttal szeretném elmagyarázni a jelenet egymásra helyezett megjelenítését, feltételezve, hogy a menüképernyő az előtérben jelenik meg, miközben a játék fut, miközben a játék fut.

Több jelenet megjelenítésekor vegye figyelembe a következőket:

  • Nem lehet egynél több eseményrendszer
  • Nem lehet egynél több hanghallgató
  • Legyen óvatos, ha több kamerát kezel

A jelenet előkészítése

Ezúttal két jelenetet készítünk elő. Legyen , és SampleSceneParenta megjelenítendő jelenet SampleSceneChild . Két jelenet előkészítésének módja megegyezik az előző tippekkel, ezért kérjük, olvassa el őket.

Ezúttal a következő elrendezést hozzuk létre. Ha rákattint a gombra a szülőjelenetben, nincs más probléma, mint a gyermekjelenet hozzáadása. és a sprite-okat úgy helyezik el, hogy könnyebben Canvas megértsék azokat a tüneteket, amelyeket később látni fog.

SampleSceneParent

SampleSceneChild

Több jelenet megjelenítésekor az objektumok környezete az egyes objektumok "rétegsorrendjétől" függ, függetlenül a jelenetegységtől. Mivel a kezdeti értékek mind 0, hagyja SampleSceneChild Canvas a nem és sprites értékeket "1" értéken.

Ne felejtse el beállítani a két jelenetet az összeállítási beállításokban.

Jelenetek feldolgozása

A kódban ugyanúgy kerül feldolgozásra, mint a jelenetváltás. Ezúttal is a gombra kattintáskor kerül feldolgozásra, de jelenetváltás helyett kiegészítésként kerül feldolgozásra.

A szkriptfájl neve tetszőleges, de itt SceneAdd van .

A szkript így néz ki:

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

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

A jelenetek LoadSceneMode váltásakor , Single de ezúttal Additive . Ennyi a különbség.

A szkript mentése után SampleSceneParent csatolja a . EventSystem

Állítsa be a módszert a OnClick gombon.

Próbálja meg futtatni a játékot, hogy megtudja, hogyan működik. Ha rákattint a gombra, látni fogja a gyermek jelenetet.

Továbbá, ha megnézzük a hierarchiát, láthatjuk, hogy két jelenet van.

Annak ellenére azonban, hogy a jelenet hozzá lett adva, úgy tűnik, hogy a szülőjelenet vászonjának tartalma nem jelenik meg. Ezzel szemben láthatja, hogy a szülőjelenet sprite-jai a rétegek sorrendjének megfelelően jelennek meg a hátoldalon.

Továbbá, ha megnézzük a konzolt, láthatjuk, hogy a naplók folyamatosan kimenetre kerülnek.

A tartalom a következő két pont.

  • A helyszínen 2 eseményrendszer található. Kérjük, győződjön meg arról, hogy mindig pontosan egy eseményrendszer van a helyszínen
  • A jelenetben 2 hanghallgató van. Kérjük, győződjön meg arról, hogy mindig pontosan egy hanghallgató van a jelenetben.

Több jelenet használata esetén meg kell felelnie ennek a két pontnak és a kamerának.

EventSystem hibák javítása

A napló tartalma a következő.

A helyszínen 2 eseményrendszer található. Kérjük, győződjön meg arról, hogy mindig pontosan egy eseményrendszer van a helyszínen

(A jelenetben két eseményrendszer van.) Győződjön meg róla, hogy mindig van egy eseményrendszer a jelenetben)

Mint írtuk, az EventSystem egyetlen megoldásba történő kombinálása megoldja a problémát.

SampleSceneParent feltételezzük, hogy mindig létezik,SampleSceneChild ezért megnyitásakor EventSystem törölje.

Természetesen kérjük, vegye figyelembe, hogy ha önmagában fut, a felhasználói felület,SampleSceneChild például a gombok nem fognak működni.

Láthatja, hogy az EventSystem naplók eltűntek a futtatáskor.

SampleSceneParent Továbbá, mivel jelen vanEventSystem, a gyermek jelenet gombjai aktiválhatók.

Az AudioListeners hibáinak javítása

A napló tartalma a következő.

A jelenetben 2 hanghallgató van. Kérjük, győződjön meg arról, hogy mindig pontosan egy hanghallgató van a jelenetben.

(Két hanghallgató van a jelenetben.) Győződjön meg arról, hogy mindig csak egy hanghallgató van a jelenetben. )

Main Camera Ha megnézi a összetevőit, akkor biztosan láthatja, hogy a Hangfigyelő létezik, így SampleSceneChild törölheti a Hangfigyelőt a mappából. Ez megoldható a következő elem kameravezérlésével, így ott foglalkozunk vele.

Ha meg akarja tartani a kamerát,SampleSceneChild törli ezt a Hangfigyelőt.

Cserélje ki a kamerát két jelenet megjelenítéséhez

Ami azt az okot illeti, hogy gyermekjelenet hozzáadásakor csak a gyermekjelenet vászonja jelenik meg, Ennek az az oka, hogy két kamera van, a szülőjelenet és a gyermekjelenet a vásznon, és csak egy kamera jelenik meg.

A megoldás erre az, hogy mindkét jelenet vásznát megjelenítjük a szülőjelenet kamerájával. A folyamat az, hogy a gyermekjelenet hozzáadása után lecseréli a gyermekjelenet vásznán lévő kamerát a szülőjelenet kamerájára.

Hozzunk létre egy szkriptet. A név önkényes, de ebben az esetben ChildSceneCamera .

A szkript így néz ki: Canvas Ez egy előfeltételként szükséges folyamat, amelyet csatolni kell a .

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 A metódus akkor kerül végrehajtásra, amikor az objektum először létezik a jelenetben. Start A metódus előtt fut le. Jó megjegyezni, hogy gyakran használja. Ezúttal feltételezzük, hogy a gyermekjelenet hozzáadásakor végrehajtásra kerül.

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

Szerezze be a szülőjelenet-vásznat és a gyermekjelenet-vásznat a kamera cseréjéhez. Ennek számos módja van, de nem ez a fő téma, így azt gondolhatja, hogy megszerezheti, ha egyelőre így csinálja.

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

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

Először semmisítse meg a gyermekjelenet kameráját Object.Destroy . Még ha el is tűnt, nincs probléma, mert a szülő jelenetének kamerája lefedheti. A törlési célt Canvas.worldCamera a helyről olvassa be a rendszer. Csak azért, mert ugyanaz a kamera, amely a jelenetben ezen a ponton van, be van állítva, és könnyen megszerezhető. Ha valóban törölni szeretné, akkor jobb, ha a kamerát a helyszínről kapja meg.

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

Végül a gyermekjelenetet Canvas.worldCamera a szülő kamerája váltja fel.

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

A szkript mentése után SampleSceneChild csatolja a . Canvas

Rendben van, ha a gyermekjelenet végrehajtásának és hozzáadásának eredménye az alábbi ábrán látható. Győződjön meg arról, hogy nincsenek naplók sem.