Jump to content
Unity Insider Forum

Kojote

Members
  • Posts

    1,471
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by Kojote

  1. Jap hab ich schon. Egal was ich einstelle, selbes Problem.
  2. Hi! Ich hab ein kleines Problem mit Occlusion Culling. So sieht die Scene aus: https://bilderupload.org/bild/9d0020136-occ1 Problem ist nun, wenn meine Camera zu nahe am Boden ist, wird Occlusion Culling aktiv und blendet mir Dinge aus, die noch gerendert werden müssten. https://bilderupload.org/bild/0b2220146-occ2 Ich habe nun schon den Offset der Camera sehr erhöht, aber selbst über 1.5 m über dem Boden macht OCC dies. Hat jemand eine Idee was ich da machen könnte? Grüße Kojote
  3. Hi! Ich hätte mal eine Frage zu Screen.SetResolution. Ich habe ein Settings Script in dem alle Quality Einstellungen zum ersten Spielstart hinterlegt sind. Für die Monitorauflösung nutze ich folgendes: if(settings.videoSettings.screenResolution == 0) { // No resolution is specified, the standard monitor resolution is used. Screen.SetResolution(Screen.width, Screen.height, settings.videoSettings.fullscreen); //Debug.LogError("No specified resolution. Use: " + Screen.width + " " + Screen.height); } else { // Load saved resolution Resolution[] resolutionsAll = Screen.resolutions; Screen.SetResolution(resolutionsAll[settings.videoSettings.screenResolution].width, resolutionsAll[settings.videoSettings.screenResolution].height, settings.videoSettings.fullscreen); //Debug.LogError("Load saved resolution. Use: " + resolutionsAll[settings.videoSettings.screenResolution].width + " " + resolutionsAll[settings.videoSettings.screenResolution].height); } settings.videoSettings.screenResolution gehört zu deinem DropDown Feld mit den möglichen Monitorauflösungen. Der ausgewählte Wert ist screenResolution. Alle Einstellungen speichere ich in einer Datei. Wenn ich also das Spiel das erste mal starte ist screenResolution immer 0, was auch funktioniert. Er holt sich Screen.with und Screen.height. Auf meinem Monitor wäre das dann 1920 x 1080. Mit der Zeile ändere ich die Monitorauflösung: Screen.SetResolution(resolutions[resolutionSelect.value].width, resolutions[resolutionSelect.value].height, fullscreenToggle.isOn); Jedes mal wenn ich den Settings etwas ändere wird die Datei überschrieben, funktioniert ebenfalls. Wenn ich nun die Datei lösche sollten eigentlich alle Werte gelöscht sein und das Script die Default Werte nutzen. Funktioniert aber nicht! Er löst zwar in den Settings diese Bedingung aus: if(settings.videoSettings.screenResolution == 0) { // No resolution is specified, the standard monitor resolution is used. Screen.SetResolution(Screen.width, Screen.height, settings.videoSettings.fullscreen); //Debug.LogError("No specified resolution. Use: " + Screen.width + " " + Screen.height); } Problem daran ist, dass die Klasse Screen den letzten Wert speichert. Habe ich also zuletzt mit Screen.SetResolution 800 x 600 angegeben, lösche die Datei und starte das Spiel wieder zum ersten mal, wird nun nicht meine wirkliche Monitorauflösung von 1920 x 1080 genutzt sondern weiterhin 800 x 600. Irgendwie speichert sich Screen.Setresolution den letzten Wert. Ändere ich den Code so ab: if(settings.videoSettings.screenResolution == 0) { // No resolution is specified, the standard monitor resolution is used. Screen.SetResolution(1920, 1080, settings.videoSettings.fullscreen); //Debug.LogError("No specified resolution. Use: " + Screen.width + " " + Screen.height); } Habe ich das Problem nicht, da ich ja mit den festen Werten von 1920 x 1080 arbeite. Ich müsste also irgendwie verhindern, dass Screen sich Werte speichert.
  4. Hi! Ich habe ein Frage zur URP. Ich bin gerade dabei die Settings zu schreiben, aber die Settings werden nicht übernommen. Zum Beispiel der Code: switch((int)shadowsDropdown.value) { case 0: QualitySettings.shadows = ShadowQuality.Disable; break; case 1: QualitySettings.shadows = ShadowQuality.HardOnly; break; case 2: QualitySettings.shadows = ShadowQuality.All; break; } Die Methode wird gestartet, der Switch ist auch aktiv. Case 0, 1 und 2 werden auch ausgeführt, jedoch ändert sich an den Schatteneinstellungen nichts. Hat jemand eine Idee woran das liegt? Ich habe jetzt nichts gefunden das man dies anders schreiben muss, wenn man auf URP umsteigt. Grüße von Kojote
  5. Meine Idee wäre auch einfach Collider. Diese muss man ja nicht so Detailverliebt machen. Es reicht ja wenn sie grob der Form entsprechen. Ob der Spieler mal bis auf 2 cm an die Kante heran kommt oder 11.2 cm merkt keiner.
  6. Fehler gefunden. Problem war das ich einen Unterwassereffekt habe. Dieser ist auch 20 km unterhalb des Terrains wo ich meine Screenshots machte. Ich weis nicht warum, aber trotz den richtigen Layers macht er die Screenshots mit dem Underwassereffekt.
  7. Fast das selbe Problem bei einem simplen Screenshot Script. Der komplette Screenshot ist grau. [SerializeField] private KeyCode screenshotKey = KeyCode.F8; private bool takeScreenshot; private string path; private void Awake() { path = Application.dataPath + "/Screenshots"; if(!Directory.Exists(path)) { Directory.CreateDirectory(path); } } private void Update() { if(Input.GetKeyDown(screenshotKey)) { takeScreenshot = true; } } private void OnEnable() { RenderPipelineManager.endCameraRendering += RenderPiplineManagerEndCameraRendering; } private void OnDisable() { RenderPipelineManager.endCameraRendering -= RenderPiplineManagerEndCameraRendering; } private void RenderPiplineManagerEndCameraRendering(ScriptableRenderContext arg1, Camera cam) { if(takeScreenshot) { takeScreenshot = false; // Zeit abfragen string time = System.DateTime.Now.ToString("dd-MM-yyyy_HH-mm-ss"); // Sceeen int width = Screen.width; int height = Screen.height; // Screenshot Texture2D screenshotTexture = new Texture2D(width, height, TextureFormat.RGB24, false); Rect rect = new Rect(0, 0, width, height); screenshotTexture.ReadPixels(rect, 0, 0); screenshotTexture.Apply(); // Save byte[] byteArray = screenshotTexture.EncodeToPNG(); File.WriteAllBytes(path + "/Screenshot_" + time + ".png", byteArray); } } }
  8. Hi! Ich habe ein Script mit dem ich eine zweite Kamera steuere. Diese Kamera macht einem Screenshot von einem Objekt. Der Screenshot wird dann als Textur2D an ein Sprite übergeben wird. Das gesamte Script hat schon in der BuildIn RenderPipline wunderbar funktioniert. Seit dem ich jedoch auf URP umgestiegen bin, funktoniert es nicht mehr. Er macht zwar ein Bild jedoch bekomme ich einen fast schwarzen Hintergrund und das Objekt welches ich ablichten wollte ist komplett schwarz. Man kann also gerade noch so erkennen, dass er überhaupt ein Screenshot erstellt hat. Das wäre der Code: yield return new WaitForSeconds(0.1f); try { RenderTexture rt = new RenderTexture(imageWidth, imageHeight, 0); rt.depth = 24; rt.antiAliasing = 8; avatarCamera.targetTexture = rt; avatarCamera.Render(); RenderTexture.active = rt; Texture2D texture = new Texture2D(imageWidth, imageHeight, TextureFormat.RGB24, true); Rect rect = new Rect(0, 0, imageWidth, imageHeight); texture.ReadPixels(rect, 0, 0); FixColorSpace(texture); texture.filterMode = FilterMode.Point; texture.Apply(); avatarCamera.targetTexture = null; RenderTexture.active = null; Destroy(rt); // Screenshot an Sprite Uebergeben targetImage.sprite = Sprite.Create(texture, new Rect(0, 0, 256, 256), new Vector2(0.5f, 0.5f), 100.0f); // Speichern in Datei byte[] bytes = texture.EncodeToPNG(); string filename = Application.dataPath + "/Screenshots/" + "Image " + imageWidth + " " + imageHeight + " "+ Time.time + ".png"; System.IO.File.WriteAllBytes(filename, bytes); createImage = false; } catch { targetImage.sprite = emptySprite; createImage = false; } avatar.SetActive(false); Hat einer eine Idee wo das Problem ist? Hat sich irgend etwas in URP dermaßen geändert? Grüße von Kojote
  9. Ah Compare ist gut! Laut Goggle kann man das so als Bedingung so schreiben: if(string.Compare("", "", CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols) == 0) {} Ignoriere Case und Symbole. Die Bedingung ist nicht true oder false sondern 0 und eine andere Zahl. Aber was kann ich erwarten wenn ich beide vergleiche? 0 und 1 oder was kommt dabei heraus? So wie ich es verstanden habe kommt links immer 0 heraus wenn beide strings gleich sind.
  10. Hi! Sagt mal, über Equals kann ich Strings vergleichen. Wie kann ich aber Strings vergleichen und von vorn herein Leerzeichen aussschließen. Fehler wie: "Ich bin ein Text" und "Ich bin ein Text " Würde ich so gern vermeiden. Grüße von Kojote
  11. Hat sich erledigt. Wurde durch einen anderen Fehler ausgelöst.
  12. Hi! Ich habe einen Fehler der mir gerade alles zuspamt: "Game object with animator is inactive" Ich habe ein Parent welches Kindobjekte deaktiviert. Die Kinder an sich sind Vögel und haben ein Steuerscript und eine Animator Komponente. Das Parent legt fest wie viele Kinder per Zufall gespawnt werden. Alle anderen werden deaktiviert. Problem ist nun bei den Kindern diese Fehlermeldung. Egal ob ich nur das Kind deaktiviere oder Kind samt Animator. Fehlermeldung bleibt. Hat einer eine Idee wo das Problem ist? Grüße von Kojote
  13. Funktioniert wunderbar, vielen Dank!
  14. Gibt es aber im Generic nicht mehr oder?
  15. Hi! Mit der letzten und vorletzten neuen Version von Unity 2020 habe ich wunderbare zufällige Fehler bekommen: (0,0): error System.IO.IOException: Sharing violation on path C:\Users\User\Documents\Project\Temp\Assembly-CSharp.dll Es kommen einige Fehler aus dem Temp Ordner, immer mit Sytsem.IO.IOException. Ich muss Unity neustarten, denn sind die Fehler weg. Leider kann ich auch nicht sagen wodurch sie ausgelöst werden, da sie zufällig erscheinen. Hat jemand die selben Probleme oder eine Lösung dafür? Grüße von Kojote
  16. Also eigentlich einmal abspielen, dann rückwärts abspielen und dann das gesamte wieder von vorn.
  17. Hi! Ich habe zwei Modelle die noch Legacy Animationen verwenden. Umgestellt auf Generic habe ich jedoch das Problem das die Animationen nun unvollständig sind. Der Ersteller hat bei den Legacy Animationen 'Wrap Mode - Clamp Forever' eingestellt. Problem damit ist nun dass beide Vögel ihre Schwingen von unten nach oben bewegen und danach das selbe wieder. Schwingen von oben nach unten hatte Clamp Forever erledigt, scheint es aber in den Generic Animationen nicht mehr zu geben. Kann man das irgendwie fixen außer die gesamte Animation neu zu erstellen? Grüße von Kojote
  18. Hallo! Ich habe ein Problem, das ich mir nicht erklären kann. Nennen wir es einfach "Bewegliche Schattenkante im Terrain". Wenn ich mich dem Terrain nähere, gibt es einen kreisförmigen Farbunterschied im Terrain. Je näher ich komme, desto größer wird er. Wenn ich auf dem Terrain stehe, ist es etwa 300 m entfernt. Denselben Effekt habe ich auch im Editor, wenn ich hinein- und herauszoome. Kann mir jemand sagen, woran das liegt? Bei Bild 4 sieht man es am besten.
  19. Hi! Ich habe mein Projekt von BuildIn zu URP 10.8 gewechselt. Die Umstellung der normalen Materlianien funktionierte gut. Nur die Partikel machen eine Menge Probleme. Wie hier am Bild zu sehen: Rechts Original, Links Nachbau. Selbe EInstellungen, nur wird links nichts angezeigt. Hat jemand eine Idee?
  20. Hi! Ich hab mich mal wieder mitd em Frame Debugger beschäftigt, da ich an einer Stelle einen plötzlichen Performanceeinbruch in der Map habe, den ich mir nicht erklären kann. Im Debugger habe ich eine rießige Liste mit "Draw Mesh". Keine Infos und nichts dazu. Was ist das? Liegt dies an Vegetation Studio oder ist das ein Fehler?
  21. Was im Endeffekt auch reichen würde, wäre eine Plane die die selbe Farbe hat wie das Terrain und knapp unter dem Terrain ist. Hatte ich schon einmal probiert. Das Problem war jedes mal, dass die Plane und das Terrain nie 100%ig die selbe Farbe hatten und unterschiedlich auf das Licht reagiert haben.
  22. Wäre eine Option. Nur beabsichtige ich den Rand der Welt als Teleporter zu nutzen. Da ich bei meinem Spiel auf Distanz setze, um Weite zu erzeugen hat man eine relativ hohe Sichtweite. Würde ich den Teleporter also weiter nach innen setzen, was ja eine Option wäre, verliere ich gut 1/5 meiner gesamten Map. Hast du eine Idee wie solche Shader sich nennen? Ich habe ein Wüstengebiet, von daher sind dichte Bäume keine Option, ebenfalls keine Mauer. Der Rand des Terrains dient auch als Teleporter-Trigger in einen anderen Bereich. Es soll also so aussehen, als läuft man einfach in das nächste Gebiet. Wäre eine Idee, werde ich auf jeden Fall mal austesten wie es wirkt.
  23. Hi! Ich überlege mal wieder wie ich das Ende meiner Welt verbessern kann. Da ich ein flaches Terrain habe fällt ein Berg als Kante aus. Idee war bisher es mit hohem Gras zu kaschieren. Funktioniert aber nicht, wenn die Sichtweite doppelt so hoch ist, wie das Gras gerendert wird. Nächste Idee war ein Nebel, der müsste aber wieder dermaßen dicht sein, dass es unatürlich wirkt. Problem auch, er verdeckt nicht wirklich die Kante, sie scheint immer noch durch. Neue Idee von mir, eine Art Verzerrungsbereich. Wenn man an warmen Tagen in die Ferne schaut verschwimmt ja alles. Gibt es so etwas als Shader und wäre es möglich dies auf eine Spline zu legen, die ich am Terrain ausrichte?
  24. OK, ich konnte den Fehler einkreisen, er kommt aus dieser Klasse: using System.Collections; using System.Collections.Generic; using Unity.Collections; using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; using UnityEngine; namespace Dungeon_Emperor { public class DE_Map_Loader_Authoring : MonoBehaviour, IConvertGameObjectToEntity { public DE_Game_Map_Configuration gameMap; public List<DE_Map_Tile_View_Configuration> tileViewConfigurations; public GameObject floorColliderPrefab; public GameObject solidColliderPrefab; public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) { // Define Archetype for every MapTile var mapTileArchetype = dstManager.CreateArchetype( typeof(DE_Map_Tile), typeof(Translation), typeof(Rotation), typeof(LocalToWorld) ); int mapWidth = gameMap.terrain.width; int mapHeight = gameMap.terrain.height; // Create entities for every tile var tileEntities = new NativeArray<Entity>(mapWidth * mapHeight, Allocator.Temp); dstManager.CreateEntity(mapTileArchetype, tileEntities); // Get pixels from the terrain and territory textures var terrainPixels = gameMap.terrain.GetPixels32(); var territoryPixels = gameMap.territory.GetPixels32(); for(int y = 0; y < mapHeight; y++) { for(int x = 0; x < mapWidth; x++) { int tileIndex = x + y * mapWidth; var tileEntity = tileEntities[tileIndex]; dstManager.SetName(tileEntity, $"Tile {x} {y}"); // Define owner and MapTile type by pixel color int owner = gameMap.palette.GetPlayer(territoryPixels[tileIndex]); DE_Map_Tile_Type terrainType = gameMap.palette.GetTerrain(terrainPixels[tileIndex]); var type = terrainType; //Owned empty tiles will become MapTileType.Tile, owned earth tiles will become MapTileType.Wall if(type == DE_Map_Tile_Type.Empty && owner > 0) type = DE_Map_Tile_Type.Tile; else if(type == DE_Map_Tile_Type.Earth && owner > 0) type = DE_Map_Tile_Type.Wall; // Assign information to entity dstManager.SetComponentData(tileEntity, new DE_Map_Tile { Type = type, Owner = owner, Position = new int2(x, y)}); dstManager.SetComponentData(tileEntity, new Translation { Value = new float3(x + 0.5f, 0, y + 0.5f) }); dstManager.SetComponentData(tileEntity, new Rotation { Value = quaternion.identity }); } } // construct BlobAsset containing the Entity id for every cell of the map using(BlobBuilder blobBuilder = new BlobBuilder(Allocator.Temp)) { ref DE_Map_Tile_Blob_Asset tileMapAsset = ref blobBuilder.ConstructRoot<DE_Map_Tile_Blob_Asset>(); BlobBuilderArray<Entity> tileArray = blobBuilder.Allocate(ref tileMapAsset.Map, mapWidth * mapHeight); // Copy MapTile entities to blob array for(int t = 0; t < mapWidth * mapHeight; t++) { tileArray[t] = tileEntities[t]; } // Create immutable BlobAssetReference var assetReference = blobBuilder.CreateBlobAssetReference<DE_Map_Tile_Blob_Asset>(Allocator.Persistent); // Assign BlobAssetReference to GameMap dstManager.AddComponentData(entity, new DE_Game_Map { TileMap = assetReference, Width = mapWidth, Height = mapHeight }); } tileEntities.Dispose(); // Initialize systems var world = World.DefaultGameObjectInjectionWorld; world.GetOrCreateSystem<ED_Tile_View_System>().ConvertMapTileViewConfigurations(tileViewConfigurations); } } } Ich vermute fast das, dass Problem mapWidth und mapHeight zu hoch sind. Wobei es nur 256 x 256 ist. Was jedoch 65536 Entities wären. Nach dem was ich gelesen habe und das richtig verstehe hat der Entitie Speicher ein 16 kb Limit.
  25. OK, ich konnte vermutlich das Problem lösen. Nun wenn ich starte bekomme ich diesen Fehler:
×
×
  • Create New...