Skata pievienošana
Verifikācijas vide
- Windows
-
- Operētājsistēmā Windows 11
- Vienotības redaktors
-
- 2020.3.25f1
- Ievades sistēmas pakete
-
- 1.2.0
Priekšnoteikumi šim padomam
Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šī padoma aprakstam.
Par skata pievienošanu
Unity ļauj vienlaikus parādīt vairākas ainas. Izmantojiet to, ja vienkārši vēlaties pārklāt ainas vai eksportēt zīmējumus uz citu faktūru.
Šoreiz es gribētu izskaidrot ainas virspusējo attēlojumu, pieņemot, ka izvēlnes ekrāns tiek parādīts priekšplānā, kamēr spēle darbojas, kamēr spēle darbojas.
Parādot vairākas ainas, ņemiet vērā tālāk norādīto informāciju.
- Nedrīkst būt vairāk par vienu notikumu sistēmu
- Nedrīkst būt vairāk par vienu audio klausītāju
- Esiet piesardzīgs, strādājot ar vairākām kamerām
Sagatavojiet ainu
Šoreiz mēs sagatavosim divas ainas. Ļaujiet būt , un SampleSceneParent
aina SampleSceneChild
, kas jāparāda papildus, ir .
Divu ainu sagatavošanas metode ir tāda pati kā iepriekšējie padomi, tāpēc, lūdzu, skatiet tos.
Šoreiz mēs izveidosim šādu izkārtojumu. Ja noklikšķināt uz pogas galvenajā ainā, nav nekādu problēmu, izņemot bērnobjekta ainas pievienošanu.
un sprites tiek novietotas, lai būtu vieglāk Canvas
saprast simptomus, kurus jūs redzēsiet vēlāk.
SampleSceneParent
SampleSceneChild
Ja tiek parādītas vairākas ainas, objektu konteksts ir atkarīgs no katra objekta "slāņu secības" neatkarīgi no ainas vienības.
Tā kā sākotnējās vērtības ir visas 0, atstājiet SampleSceneChild
Canvas
no un sprites iestatītu uz "1".
Neaizmirstiet iestatīt abas ainas būvējuma iestatījumos.
Ainu apstrāde
Tas tiek apstrādāts kodā tāpat kā ainu pārslēgšana. Arī šoreiz tas tiek apstrādāts, kad tiek noklikšķināts uz pogas, bet tas tiek apstrādāts kā papildinājums, nevis ainas slēdzis.
Skripta faila nosaukums ir patvaļīgs, bet šeit SceneAdd
tas ir .
Skripts izskatās šādi:
using UnityEngine;
using UnityEngine.SceneManagement; // 追加
public class SceneAdd : MonoBehaviour
{
<summary>ボタンをクリックしたときに呼ばれます。</summary>
public void OnClick()
{
// 指定したシーンを追加します
SceneManager.LoadScene("SampleSceneChild", LoadSceneMode.Additive);
}
}
Pārslēdzot ainas, es iestatīju uz , LoadSceneMode
Single
bet šoreiz Additive
tas ir .
Tas ir viss, kas ir atšķirīgs.
Pēc SampleSceneParent
skripta saglabāšanas pievienojiet to . EventSystem
Iestatiet metodi uz pogas OnClick
.
Mēģiniet palaist spēli, lai redzētu, kā tā darbojas. Noklikšķinot uz pogas, jūs redzēsit bērna ainu.
Turklāt, ja paskatās uz hierarhiju, var redzēt, ka ir divas ainas.
Tomēr, neskatoties uz to, ka aina ir pievienota, šķiet, ka vecāku ainas audekla saturs netiek parādīts. Un otrādi, jūs varat redzēt, ka vecāku ainas sprites tiek parādītas aizmugurē atbilstoši slāņu secībai.
Turklāt, ja paskatās uz konsoli, jūs varat redzēt, ka žurnāli tiek pastāvīgi izvadīti.
Saturs ir šāds: divi punkti.
- Notikuma vietā ir 2 notikumu sistēmas. Lūdzu, pārliecinieties, ka notikuma vietā vienmēr ir tieši viena notikumu sistēma
- Uz skatuves ir 2 audio klausītāji. Lūdzu, pārliecinieties, ka uz skatuves vienmēr ir tieši viens audio klausītājs.
Izmantojot vairākas ainas, ir jāatbilst šiem diviem punktiem un kamerai.
Notikumu sistēmas kļūdu novēršana
Žurnāla saturs ir šāds.
Notikuma vietā ir 2 notikumu sistēmas. Lūdzu, pārliecinieties, ka notikuma vietā vienmēr ir tieši viena notikumu sistēma
(Notikuma vietā ir divas notikumu sistēmas.) Pārliecinieties, ka jūsu ainā vienmēr ir viena notikumu sistēma)
Kā rakstīts, apvienojot EventSystem vienā risinājumā, problēma tiks atrisināta.
SampleSceneParent
tiek pieņemts, ka tas vienmēr pastāv, tāpēc izdzēsiet to,SampleSceneChild
kad EventSystem
to atverat.
Protams, lūdzu, ņemiet vērā, ka, ja jūs pats darbojaties, lietotāja interfeiss, piemēram, pogas,SampleSceneChild
nedarbosies.
Jūs varat redzēt, ka, palaižot to, notikumu sistēmas žurnāli ir pazuduši.
SampleSceneParent
Turklāt, tā kā tas ir EventSystem
klāt, pogas bērnu ainā var aktivizēt.
AudioListeners kļūdu novēršana
Žurnāla saturs ir šāds.
Uz skatuves ir 2 audio klausītāji. Lūdzu, pārliecinieties, ka uz skatuves vienmēr ir tieši viens audio klausītājs.
(Uz skatuves ir divi audio klausītāji.) Pārliecinieties, ka uz skatuves visu laiku ir tikai viens audio klausītājs. )
Main Camera
Ja paskatās uz , jūs noteikti varat redzēt, ka audio klausītājs pastāv, tāpēc SampleSceneChild
jūs varat izdzēst audio klausītāju .
To var atrisināt ar nākamā vienuma kameras vadību, tāpēc mēs to risināsim tur.
Ja vēlaties paturēt kameru,SampleSceneChild
izdzēsīsit šo audio klausītāju.
Kameras maiņa, lai rādītu divas ainas
Attiecībā uz iemeslu, ka, pievienojot bērnu ainu, tiek parādīts tikai bērna ainas audekls, Tas ir tāpēc, ka uz audekla ir iestatītas divas kameras, vecāku aina un bērna aina, un tiek parādīta tikai viena kamera.
Risinājums tam ir parādīt abu ainu audeklu ar vecāku ainas kameru. Process ir aizstāt kameru uz bērna ainas audekla ar vecāku ainas kameru pēc bērna ainas pievienošanas.
Izveidosim skriptu. Nosaukums ir patvaļīgs, bet šajā gadījumā ChildSceneCamera
tas ir .
Skripts izskatās šādi: Canvas
Tas ir priekšnoteikums, lai piesaistītu .
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
Metode tiek izpildīta pirmo reizi, kad objekts atrodas ainā. Start
Izpilda pirms metodes.
Ir labi atcerēties, ka jūs to bieži izmantojat.
Šoreiz tiek pieņemts, ka tas tiks izpildīts, kad tiks pievienota bērna aina.
<summary>シーンに追加されたタイミングで処理されます。</summary>
void Awake()
{
// 処理
}
Iegūstiet vecākattēla audeklu un bērnainas audeklu, lai aizstātu kameru. Ir dažādi veidi, kā to izdarīt, bet tas nav galvenais temats, tāpēc jūs varat domāt, ka jūs varat to iegūt, ja jūs to darāt šādā veidā.
// 親のシーンのキャンバスを取得
var parentScene = SceneManager.GetSceneByName("SampleSceneParent");
var parentCanvas = parentScene.GetRootGameObjects().First(obj => obj.GetComponent<Canvas>() != null).GetComponent<Canvas>();
// 子のシーンのキャンバスを取得
var childCanvas = GetComponent<Canvas>();
Vispirms iznīciniet bērna ainas kameru Object.Destroy
. Pat ja tas ir pagājis, nav problēmu, jo to var aptvert vecāku ainas kamera.
Dzēšanas mērķis Canvas.worldCamera
tiek izgūts no .
Tas ir tikai tāpēc, ka tā pati kamera, kas šajā brīdī ir ainai, ir iestatīta un to var viegli iegūt.
Ja jūs patiešām vēlaties to izdzēst, labāk iegūstiet kameru no skatuves.
// 子のシーンのカメラを削除
Object.Destroy(childCanvas.worldCamera.gameObject);
Visbeidzot, bērna aina Canvas.worldCamera
tiek aizstāta ar vecāku kameru.
// 子のシーンのキャンバスのカメラを親のシーンのカメラに置き換えます
childCanvas.worldCamera = parentCanvas.worldCamera;
Pēc SampleSceneChild
skripta saglabāšanas pievienojiet to . Canvas
Tas ir labi, ja bērna ainas izpildes un pievienošanas rezultāts ir tāds, kā parādīts zemāk redzamajā attēlā. Pārliecinieties, ka nav arī žurnālu.