Stseeni lisamine
Kontrollimise keskkond
- Windows
-
- Windows 11
- Ühtsuse toimetaja
-
- 2020.3.25f1
- Sisendsüsteemi pakett
-
- 1.2.0
Selle näpunäite eeltingimused
Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.
Teave stseeni lisamise kohta
Unity võimaldab teil kuvada korraga mitu stseeni. Kasutage seda siis, kui soovite lihtsalt stseene üle katta või eksportida oma joonised erineva tekstuuriga.
Seekord tahaksin selgitada stseeni pealmist kuvamist, eeldades, et menüüekraan kuvatakse esiplaanil, kui mäng töötab, kui mäng töötab.
Mitme stseeni kuvamisel peaksite teadma järgmist.
- Ei tohi olla rohkem kui üks EventSystem
- Heli kuulajaid ei tohi olla rohkem kui üks
- Olge mitme kaamera käsitsemisel ettevaatlik
Valmistage stseen ette
Seekord valmistame ette kaks stseeni. Las olla , ja SampleSceneParent
lisaks kuvatav stseen SampleSceneChild
on .
Kahe stseeni ettevalmistamise meetod on sama, mis eelmistel näpunäidetel, nii et palun vaadake neid.
Seekord loome järgmise paigutuse. Kui klõpsate emastseenis nuppu, pole probleemi, välja arvatud lapsestseeni lisamine.
ja spraidid on paigutatud selleks, et hiljem nähtavaid sümptomeid oleks lihtsam Canvas
mõista.
SampleSceneParent
SampleSceneChild
Kui kuvatakse mitu stseeni, sõltub objektide kontekst iga objekti "kihilisest järjestusest", olenemata stseeniüksusest.
Kuna algväärtused on kõik 0, jätke SampleSceneChild
Canvas
no ja spraidid väärtuseks "1".
Ärge unustage seada need kaks stseeni järgusätetes.
Stseenide töötlemine
Seda töödeldakse koodis samamoodi nagu stseenide vahetamist. Ka seekord töödeldakse seda nupu klõpsamisel, kuid seda töödeldakse stseeni lüliti asemel lisana.
Skriptifaili nimi on meelevaldne, kuid siin SceneAdd
see on .
Skript näeb välja selline:
using UnityEngine;
using UnityEngine.SceneManagement; // 追加
public class SceneAdd : MonoBehaviour
{
<summary>ボタンをクリックしたときに呼ばれます。</summary>
public void OnClick()
{
// 指定したシーンを追加します
SceneManager.LoadScene("SampleSceneChild", LoadSceneMode.Additive);
}
}
Stseenide vahetamisel LoadSceneMode
seadsin , Single
kuid seekord Additive
on see .
See on kõik, mis seal on erinevuseks.
Pärast SampleSceneParent
skripti salvestamist manustage see . EventSystem
Seadke meetod nupule OnClick
.
Proovige mängu käivitada, et näha, kuidas see töötab. Kui klõpsate nuppu, näete lapse stseeni.
Samuti, kui vaatate hierarhiat, näete, et seal on kaks stseeni.
Vaatamata sellele, et stseen on lisatud, tundub, et vanema stseeni lõuendi sisu ei kuvata. Vastupidi, näete, et emastseeni spraidid kuvatakse tagaküljel vastavalt kihtide järjekorrale.
Samuti, kui vaatate konsooli, näete, et logid väljastatakse pidevalt.
Sisu on järgmised kaks punkti.
- Stseenis on 2 sündmuste süsteemi. Palun veenduge, et sündmuskohal oleks alati täpselt üks sündmuste süsteem
- Stseenis on 2 heli kuulajat. Palun veenduge, et stseenis oleks alati täpselt üks heli kuulaja.
Mitme stseeni kasutamisel on vaja vastata nendele kahele punktile ja kaamerale.
EventSystemi vigade parandamine
Logi sisu on järgmine.
Stseenis on 2 sündmuste süsteemi. Palun veenduge, et sündmuskohal oleks alati täpselt üks sündmuste süsteem
(Stseenis on kaks sündmuste süsteemi.) Veenduge, et teie stseenis oleks alati üks sündmuste süsteem)
Nagu kirjutatud, lahendab probleemi EventSystemi ühendamine üheks lahenduseks.
SampleSceneParent
eeldatakse, et see on alati olemas,SampleSceneChild
nii et kustutage see selle avamisel EventSystem
.
Muidugi pange tähele, et kui käivitate iseenesest, ei tööta kasutajaliides,SampleSceneChild
näiteks nupud.
Näete, et sündmusesüsteemi logid on selle käivitamisel kadunud.
SampleSceneParent
Samuti, kuna see on EventSystem
olemas, saab lapse stseeni nuppe aktiveerida.
AudioListenersi vigade parandamine
Logi sisu on järgmine.
Stseenis on 2 heli kuulajat. Palun veenduge, et stseenis oleks alati täpselt üks heli kuulaja.
(Stseenis on kaks helikuulajat.) Veenduge, et stseenis oleks kogu aeg ainult üks helikuulaja. )
Main Camera
Kui vaatate komponente , näete kindlasti, et Audio Listener on olemas, nii et SampleSceneChild
saate Audio Listeneri kustutada .
Seda saab lahendada järgmise elemendi kaamerajuhtimisega, nii et me tegeleme sellega seal.
Kui soovite kaamera alles jätta,SampleSceneChild
kustutate selle Audio Listeneri.
Kaamera vahetamine kahe stseeni kuvamiseks
Mis puutub põhjusse, et lapse stseeni lisamisel kuvatakse ainult lapse stseeni lõuend, Seda seetõttu, et lõuendil on kaks kaamerat, vanem stseen ja lapse stseen ning kuvatakse ainult üks kaamera.
Selle lahenduseks on mõlema stseeni lõuendi kuvamine vanema stseeni kaameraga. Protsess on lapse stseeni lõuendil oleva kaamera asendamine vanema stseeni kaameraga pärast lapse stseeni lisamist.
Loome skripti. Nimi on meelevaldne, kuid sel juhul ChildSceneCamera
on see .
Skript näeb välja selline: Canvas
See on eeltingimus protsess, mida lisada .
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
Meetod käivitatakse esimest korda, kui objekt stseenis eksisteerib. Start
Käivitab enne meetodit.
Hea on meeles pidada, et kasutate seda sageli.
Seekord eeldatakse, et see täidetakse siis, kui lisatakse lapse stseen.
<summary>シーンに追加されたタイミングで処理されます。</summary>
void Awake()
{
// 処理
}
Hankige kaamera asemele emastseeni lõuend ja tütarstseeni lõuend. Selleks on mitmeid viise, kuid see ei ole peamine teema, nii et võite arvata, et saate selle, kui teete seda praegu nii.
// 親のシーンのキャンバスを取得
var parentScene = SceneManager.GetSceneByName("SampleSceneParent");
var parentCanvas = parentScene.GetRootGameObjects().First(obj => obj.GetComponent<Canvas>() != null).GetComponent<Canvas>();
// 子のシーンのキャンバスを取得
var childCanvas = GetComponent<Canvas>();
Hävitage kõigepealt lapse stseeni kaamera Object.Destroy
. Isegi kui see on kadunud, pole probleemi, sest seda saab katta vanema stseeni kaameraga.
Kustutamise sihtmärk Canvas.worldCamera
tuuakse aadressilt .
See on lihtsalt sellepärast, et sama kaamera, mis stseenil sel hetkel on, on seatud ja seda saab hõlpsasti omandada.
Kui soovite selle tegelikult kustutada, peaksite parem kaamera sündmuskohalt hankima.
// 子のシーンのカメラを削除
Object.Destroy(childCanvas.worldCamera.gameObject);
Lõpuks asendatakse lapse stseen Canvas.worldCamera
vanema kaameraga.
// 子のシーンのキャンバスのカメラを親のシーンのカメラに置き換えます
childCanvas.worldCamera = parentCanvas.worldCamera;
Pärast SampleSceneChild
skripti salvestamist manustage see . Canvas
See on OK, kui lapse stseeni täitmise ja lisamise tulemus on selline, nagu on näidatud alloleval joonisel. Veenduge, et ka logisid poleks.