Skata pievienošana

Lapa atjaunota :
Lapas izveides datums :

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 SampleSceneParentaina 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.