Tilanteen lisääminen
Varmennusympäristö
- Windows
-
- Windows 11
- Unity-editori
-
- 2020.3.25F1
- Syöttöjärjestelmän paketti
-
- 1.2.0
Tämän vinkin edellytykset
Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.
Tietoja kohtauksen lisäämisestä
Unity-toiminnon avulla voit näyttää useita kohtauksia samanaikaisesti. Käytä sitä, kun haluat vain peittää kohtauksia tai viedä piirustuksesi toiseen tekstuuriin.
Tällä kertaa haluaisin selittää kohtauksen päällekkäisen näytön olettaen, että valikkonäyttö näkyy etualalla, kun peli on käynnissä pelin ollessa käynnissä.
Kun näytät useita kohtauksia, ota huomioon seuraavat asiat:
- Tapahtumajärjestelmiä saa olla vain yksi
- Äänenkuuntelijoita saa olla vain yksi
- Ole varovainen, kun käsittelet useita kameroita
Valmistele kohtaus
Tällä kertaa valmistelemme kaksi kohtausta. Olkoon , ja SampleSceneParent
lisäksi näytettävä näkymä SampleSceneChild
on .
Kahden kohtauksen valmistelumenetelmä on sama kuin edelliset vinkit, joten tutustu niihin.
Tällä kertaa luomme seuraavan asettelun. Jos napsautat päänäkymän painiketta, ei ole muuta ongelmaa kuin lisätä lapsikohtaus.
Ja sprites on sijoitettu, jotta on helpompi Canvas
ymmärtää oireita, joita näet myöhemmin.
Näytekohtausvanhempi
Näytekohtauslapsi
Kun näytetään useita kohtauksia, objektien konteksti riippuu kunkin objektin "tasojärjestyksestä" näkymäyksiköstä riippumatta.
Koska kaikki alkuarvot ovat 0, jätä SampleSceneChild
Canvas
ei- ja sprites-arvoksi "1".
Älä unohda asettaa kahta kohtausta rakennusasetuksissa.
Kohtausten käsittely
Se käsitellään koodissa samalla tavalla kuin kohtausten vaihtaminen. Tälläkin kertaa se käsitellään, kun painiketta napsautetaan, mutta se käsitellään lisäyksenä kohtauskytkimen sijaan.
Skriptitiedoston nimi on mielivaltainen, mutta tässä SceneAdd
se on .
Skripti näyttää tältä:
using UnityEngine;
using UnityEngine.SceneManagement; // 追加
public class SceneAdd : MonoBehaviour
{
<summary>ボタンをクリックしたときに呼ばれます。</summary>
public void OnClick()
{
// 指定したシーンを追加します
SceneManager.LoadScene("SampleSceneChild", LoadSceneMode.Additive);
}
}
Kun vaihdan kohtausta, asetin arvoksi , LoadSceneMode
Single
mutta tällä kertaa Additive
se on .
Siinä kaikki, mitä erossa on.
Kun SampleSceneParent
olet tallentanut komentosarjan, liitä se . EventSystem
Aseta menetelmä painikkeeseen OnClick
.
Kokeile suorittaa peli nähdäksesi, miten se toimii. Jos napsautat painiketta, näet lapsikohtauksen.
Lisäksi, jos katsot hierarkiaa, näet, että kohtauksia on kaksi.
Huolimatta siitä, että kohtaus on lisätty, näyttää siltä, että pääkohtauksen kankaan sisältöä ei näytetä. Sitä vastoin voit nähdä, että pääkohtauksen sprites näytetään takapuolella tasojen järjestyksen mukaan.
Lisäksi, jos katsot konsolia, näet, että lokit tulostetaan jatkuvasti.
Sisältö on seuraavat kaksi kohtaa.
- Kohtauksessa on 2 tapahtumajärjestelmää. Varmista, että tapahtumapaikalla on aina tasan yksi tapahtumajärjestelmä
- Kohtauksessa on 2 äänen kuuntelijaa. Varmista, että kohtauksessa on aina tasan yksi äänen kuuntelija.
Kun käytät useita kohtauksia, on tarpeen vastata näitä kahta pistettä ja kameraa.
EventSystem-virheiden korjaaminen
Lokin sisältö on seuraava.
Kohtauksessa on 2 tapahtumajärjestelmää. Varmista, että tapahtumapaikalla on aina tasan yksi tapahtumajärjestelmä
(Kohtauksessa on kaksi tapahtumajärjestelmää.) Varmista, että kohtauksessasi on aina yksi tapahtumajärjestelmä)
Kuten kirjoitettu, EventSystemin yhdistäminen yhdeksi ratkaisuksi ratkaisee ongelman.
SampleSceneParent
oletetaan olevan aina olemassa, joten poista se,SampleSceneChild
kun EventSystem
avaat sen.
Huomaa tietysti, että jos suoritat itse, käyttöliittymä, kuten painikkeet,SampleSceneChild
eivät toimi.
Voit nähdä, että EventSystem-lokit ovat kadonneet, kun suoritat sen.
SampleSceneParent
Lisäksi, koska se on EventSystem
läsnä, lapsikohtauksen painikkeet voidaan aktivoida.
Korjaa AudioListeners-virheet
Lokin sisältö on seuraava.
Kohtauksessa on 2 äänen kuuntelijaa. Varmista, että kohtauksessa on aina tasan yksi äänen kuuntelija.
(Kohtauksessa on kaksi äänen kuuntelijaa.) Varmista, että kohtauksessa on aina vain yksi äänen kuuntelija. )
Main Camera
Jos tarkastelet , voit varmasti nähdä, että Audio Listener on olemassa, joten SampleSceneChild
voit poistaa Audio Listenerin .
Se voidaan ratkaista seuraavan kohteen kameraohjauksella, joten käsittelemme sitä siellä.
Jos haluat säilyttää kameran,SampleSceneChild
poistat tämän äänen kuuntelijan.
Kameran muuttaminen näyttämään kaksi näkymää
Mitä tulee siihen, että vain lapsikohtauksen kangas näytetään, kun lisäät lapsikohtauksen, Tämä johtuu siitä, että kankaalle on asetettu kaksi kameraa, päänäkymä ja lapsinäkymä, ja vain yksi kamera näytetään.
Ratkaisu tähän on näyttää molempien kohtausten kangas vanhemman kohtauksen kameralla. Prosessi on korvata lapsinäkymän kankaalla oleva kamera päänäkymän kameralla, kun lapsinäkymä on lisätty.
Luodaan komentosarja. Nimi on mielivaltainen, mutta tässä tapauksessa ChildSceneCamera
se on .
Skripti näyttää tältä: Canvas
Se on ennakkoehtoinen prosessi, joka liitetään .
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
Menetelmä suoritetaan, kun objekti esiintyy kohtauksessa ensimmäisen kerran. Start
Suorittaa ennen menetelmää.
On hyvä muistaa, että käytät sitä usein usein.
Tällä kertaa oletetaan, että se suoritetaan, kun lapsikohtaus lisätään.
<summary>シーンに追加されたタイミングで処理されます。</summary>
void Awake()
{
// 処理
}
Hanki päänäkymän piirtoalue ja lapsinäkymän piirtoalue korvaamaan kamera. On olemassa useita tapoja tehdä se, mutta se ei ole pääaihe, joten voit ajatella, että voit saada sen, jos teet sen tällä tavalla toistaiseksi.
// 親のシーンのキャンバスを取得
var parentScene = SceneManager.GetSceneByName("SampleSceneParent");
var parentCanvas = parentScene.GetRootGameObjects().First(obj => obj.GetComponent<Canvas>() != null).GetComponent<Canvas>();
// 子のシーンのキャンバスを取得
var childCanvas = GetComponent<Canvas>();
Tuhoa ensin lapsinäkymän kamera Object.Destroy
. Vaikka se olisi poissa, ei ole mitään ongelmaa, koska vanhemman kohtauksen kamera voi peittää sen.
Poistokohde Canvas.worldCamera
noudetaan kohteesta .
Se johtuu vain siitä, että sama kamera, joka kohtauksessa on tässä vaiheessa, on asetettu ja se voidaan helposti hankkia.
Jos haluat todella poistaa sen, sinun on parasta hankkia kamera paikalta.
// 子のシーンのカメラを削除
Object.Destroy(childCanvas.worldCamera.gameObject);
Lopuksi lapsikohtaus Canvas.worldCamera
korvataan vanhemman kameralla.
// 子のシーンのキャンバスのカメラを親のシーンのカメラに置き換えます
childCanvas.worldCamera = parentCanvas.worldCamera;
Kun SampleSceneChild
olet tallentanut komentosarjan, liitä se . Canvas
On OK, jos lapsikohtauksen suorittamisen ja lisäämisen tulos on alla olevan kuvan mukainen. Varmista, ettei myöskään ole lokeja.