Szcenárió hozzáadása
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 SampleSceneParent
a 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.