Unity3D -ben a teljesen üres, nem renderelt zónákban, beragadó utókép (szemét) marad. Mi lehet a gond a meglévő kódommal?
A lényeg, hogy van a fő kamera, ami alapból a játék felbontásával renderel teljes képernyőn, de lehetőséget akarok adni a játékosnak, hogy a függőleges pixelszámot csökkenteni tudja igény szerint, így fekete sávok veszik át a képernyő felső és alsó részét. Ezt egyszerűen a pixelRect segítségével oldom meg. Ezzel FPS nyerhető a játékban, cserébe játszató marad a játék natív képélességgel, feltéve, ha a játékost nem zavarja, hogy felül és alul hiányzik egy kisebb/nagyobb sáv, amit amúgy is tud kompenzálni a FOV módosításával. A probléma csupán az, hogy beragadó kép marad a nem renderelt részeken, és az alábbi kódom se segít:
Itt már a ChatGPT -t is segítségül hívtam, azért ilyen a megoldás amilyen, vagyis azt az ajánlatot kaptam, hogy a LateUpdate() függvényen belül végezzem el az átméretezést, különben nem lesz az üres zónákra hatással a "backgroundColor" és a "clearFlags" átállítása sem. Viszont sehogysem működik, ugyanúgy beragadó képet kapok. Ha nem a LateUpdate -n belül végzem, akkor sem jó, tehát valahol máshol lesz a gond. Ez csak akkor frissül feketére, ha Alt + Tab -ot nyomok, vagy ha játékon belül, teljes képernyőn felbontást módosítok, ami frissíti az egész képet egy pillanatra, de amint kicsinyítem a pixelRect függőleges értékét, vagy megnyitok egy menüt (GUI), az is egyből elkezd beleégni a fekete sávokba.
Hogy lehet egyszerűen rávenni az Unity -t, hogy ahol semmit nem kell renderelni, ott egyszerűen tisztítsa meg fekete színnel a képet?
LateUpdate animációhoz van, az után fut hogy a modellek animálva voltak, hogy tudj pl IK-t számolni ha akarsz. Ne egy chatbottól kérj fejlesztési tanácsot...
Azt hiszem megvan a legideálisabb megoldás:
Texture2D blackTexture = new Texture2D(1, 1);
blackTexture.SetPixel(0, 0, Color.black);
blackTexture.Apply();
void OnGUI()
{
GUI.DrawTexture(new Rect(0f, 0f, (float)Screen.width, (float)((Screen.height - MySettings.renderedHeight) / 2)), MySettings.blackTexture);
GUI.DrawTexture(new Rect(0f, (float)(Screen.height - (Screen.height - MySettings.renderedHeight) / 2), (float)Screen.width, (float)((Screen.height - MySettings.renderedHeight) / 2)), MySettings.blackTexture);
...
..
.
}
Nem is értem miért nem jutott eszembe korábban.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!