Dela via


Kontext- och hanteringsinställningar för World Locking Tools

World Locking Tools Context möjliggör parametrisk anpassning av World Locking Tools Manager i Unity Inspector.

Även om Komponenten WorldLockingContext presenterar ett användargränssnitt för WorldLockingManager är det viktigt att förstå att de inte är samma sak, och i vissa situationer kan det vara viktigt att förstå deras relation.

Manager är en singleton

WorldLockingManager är en singleton som skapats på begäran och som bevaras under programmets livslängd. Om inga anrop görs till WorldLockingManager kommer det aldrig att instansieras. När instansierats förblir den aktiv tills programmet stängs av. Den förstörs aldrig och instansieras igen.

WorldLockingManager är inte ett Unity-objekt, det är en allmän C#-klass. Uppdateringen drivs av en unity-proxykomponent, en instans av den privata klassen WorldLockingManager.UpdateProxy. Det är annars oberoende av Unitys cykler för att skapa/uppdatera/förstöra.

Kontexten är en Unity-komponent

WorldLockingContext är en Unity-komponent som läggs till i ett objekt i scenen på vanligt sätt. Fälten visas i Unity Inspector, precis som andra vanliga Unity-komponentfält.

Även om det inte är ett fel att ha flera aktiva WorldLockingContexts i en enda scen, är det förmodligen inte önskvärt, eftersom beteendet skulle vara odefinierat, beroende på den okända ordningen på objektbelastningar.

Inställningarna i en kontext tillämpas när WorldLockingContext läses in. Mer specifikt push-överför kontexten sina inställningar till World Locking Tools Manager i sitt OnEnable-anrop, och varje gång dess scen blir den aktiva scenen. Det senare tillämpas som en del av återanropet Unity.SceneManager.activeSceneChanged, om och endast om den nya aktiva scenen är den scen som kontexten tillhör.

Alla inställningar kan tillämpas från skript

När som helst under körningen kan programmet tillämpa anpassade inställningar på WorldLockingManager via skript. Om det krävs en nedtagning och återskapande av resurser för att göra en ändring i inställningarna, kommer den rekonstruktionen att ske omedelbart när inställningarna ändras.

Det finns vissa bekvämlighetsmedlemmar för att hämta enskilda egenskapsvärden från WorldLockingManager, till exempel AutoSpara, men inställningen av parametrar sker alltid aggregerat. Kod för att växla funktionerna AutoMerge och AutoRefreeze kan till exempel se ut så här:

/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;

På samma sätt för diagnostikinställningarna.

Observera att om du ändrar flera inställningar samtidigt på det här sättet medför det bara kostnaden för en enda ombyggnad (om någon krävs).

Inställningar prioritet

Regler för de inställningar som för närvarande tillämpas på WorldLockingManager är mycket enkla:

  1. Om ingen scen som innehåller en kontext har lästs in och inga inställningar uttryckligen har angetts från skriptet, har WorldLockingManager standardinställningar.

  2. En inställning behåller sitt värde tills det åsidosättas av en WorldLockingContext-inläsning med en scen eller en explicit ändring som anropas från programmet i skriptet.

Försiktighet bör användas när du blandar Inställningar för World Locking Tools Manager från kontexter och inställningar från skript. Eftersom kontexten alltid tillämpar sina inställningar vid belastning, kommer ett skript som tillämpar inställningen manuellt under belastningen, särskilt från dess OnEnable-återanrop, sannolikt att stöta på konkurrensförhållanden och obestämd beteende.

Tillgängliga inställningar

De tillgängliga inställningarna för att kontrollera beteendet för World Locking Tools delas in i grupper på följande sätt.

En grundläggande kontextkonfiguration för låsning av världen

Automatiseringsinställningar

Automation-inställningar styr körningsbeteendet för World Locking Tools Manager. Fälten som är tillgängliga för ändringar och deras konsekvenser dokumenteras i klassen Manager Inställningar. De fokuserar på att aktivera eller inaktivera automatiserade periodiska åtgärder av chefen. Alla inaktiverade automatiserade åtgärder kan utföras manuellt i stället.

Avsnittet automation i kontexten

Länkningsinställningar

Länkningsinställningar används för att explicit definiera scenen GameObjects vars transformeringar ska användas för att tillämpa Korrigeringar av World Locking Tools.

Länkningsavsnittet i kontexten

Fältet "Använd befintlig" gör att länkade objekt kan anges en gång i scenen med kamerariggen (med "Använd befintlig" false) och inte åsidosättas genom inläsning av efterföljande innehållsscener (med "Använd befintlig" true).

Omvänt tillåter inställningen "Använd befintlig" till false att flera scener var och en med en annan kamerarigg binder till lämpliga platser i kamerans hierarki.

När du skapar och hanterar kamerahierarkin från skriptet ska fältet "Använd befintlig" anges till true för alla kontexter och länkarna uppdateras uttryckligen från kamerans hanteringsskript.

När de nödvändiga transformorna inte har angetts, antingen vänster null eller alla kontexter har "Använd befintlig", utfärdar systemet en varning och försöker härleda bra alternativ. Vi rekommenderar, men inte krävs, att uttryckligen ange lämpliga transformeringar i stället för att ha system gissa.

Det finns ytterligare två alternativ här som styr hur kameratransformeringskorrigeringen ska tillämpas.

Den första kryssrutan för "Tillämpa justering" är som standard aktiverad. Detta talar om för systemet att tillämpa den beräknade kamerakorrigeringen varje bildruta på "Justeringsram" GameObject. Att inaktivera detta är en mycket avancerad funktion och bör bara provas när alla andra problem har lösts, och en djup förståelse för World Locking Tools har uppnåtts. Kort säga, det talar om för systemet att kamerakorrigeringen inte ska tillämpas på kameran, men kommer att tillämpas på andra sätt. Detta sker vanligtvis via en AlignSubtree komponent, men behöver inte vara det.

Den andra kryssrutan, för "No Pitch And Roll", talar om för systemet att nollställa alla tonhöjder och rulla som beräknas i omvandlingen från Playspace till Låst utrymme. (Se den här diskussionen om WLT-koordinatutrymmen). Detta påverkar inte den rotation som tillämpas av SpacePin systemet, utan påverkar bara den värld som låser kamerakorrigeringstransformationen som beräknas av Frozen World Engine.

Inställningar för fästpunktshantering

Fästpunktshantering inställningarna för alla explicita val av systemet för fästpunktsspårning. Det här valet görs för närvarande endast vid start och när du har valt det går det inte att ändra det.

Andra inställningar här ger kontroll över densiteten för den underliggande interna fästpunktsdiagrammet. Dessa kan ändras när som helst, även om deras effekt kan ta lite tid att sprida genom den interna grafen.

När du täcker mycket stora områden kanske man vill sänka densiteten för den interna fästpunktsgrafen för att offra noggrannhet för prestanda. Att öka MinNewAnchorDistance gör just det. Genom att öka det minsta avståndet som krävs innan du lägger till en ny intern fästpunkt ökar avståndet mellan fästpunkterna, så fästpunkternas densitet minskar.

Det bör noteras att MaxAnchorEdgeLength måste vara större än MinNewAnchorDistance för att kunna klara gränsgenereringstestet. I praktiken fungerar en MaxAnchorEdgeLength 10-20% större än MinNewAnchorDistance bra.

Parametern MaxLocalAnchors begränsar direkt antalet interna fästpunkter i stället för att ändra densiteten. För närvarande, när ankarantalet är över gränsen, återanvänds fästpunkter som är mest avlägsna från kameran för att få ner antalet. Andra algoritmer är dock intressanta och undersöks, så ett program bör inte vara beroende av just den här implementeringen.

Avsnittet för fästpunktshantering i kontexten

Mer information dokumenteras i anchor Inställningar struct.

Diagnostikinställningar

Diagnostikinställningarna styr insamlingen av diagnostik för analys av beteende och felsökning. De bör normalt lämnas med uppsättningen "Använd standardvärden", vilket bland annat inaktiverar insamlingen av diagnostik. Diagnostiksamlingen är ett bra prestandadrag, så bör undvikas om det inte behövs.

Diagnostikavsnittet i kontexten

När oväntat och oönskat beteende visas under utvecklingen samlas diagnostikdata in genom att inaktivera Använd standardvärden och aktivera diagnostik Inställningar. Aktiverad aktiverar insamling av data som kan vara avgörande för att förstå och åtgärda det beteendet.

Fälten som är tillgängliga för ändring beskrivs i klassen Diagnostik Inställningar.

Standardinställningar

Både hanteraren och diagnostikinställningarna innehåller kryssrutan "Använd standardvärden" i inställningarna. Egenskapen "Använd standardvärden" är också tillgänglig från skriptet.

När egenskapen "Använd standardvärden" är true används de aktuella standardinställningarna. Om standardvärdena för en egenskap ändras i en ny version instruerar egenskapen "Använd standardvärden" systemet att använda det nya egenskapsvärdet.

Om du anger egenskapen "Använd standardvärden" till true när som helst återställs alla värden till deras aktuella standardvärden. Om du vill låsa värdena vid en ögonblicksbild av standardvärdena vid en viss tidpunkt aktiverar du egenskapen "Använd standardvärden" för att återställa alla fält till de aktuella standardvärdena och avmarkerar sedan kryssrutan för att förhindra att de ändras med en uppdatering.

Vi föreslår att "Använd standardvärden" ska vara inställt på sant, förutom under utveckling för experimentering och felsökning.

Se även