Jump to content
Unity Insider Forum

Triky313

Members
  • Content Count

    109
  • Joined

  • Last visited

  • Days Won

    1

Triky313 last won the day on May 2

Triky313 had the most liked content!

Community Reputation

4 Neutral

About Triky313

  • Rank
    Advanced Member

Profile Information

  • Gender
    Male
  • Location
    Hamburg, Germany
  • Interests
    Games, Technik und mehr... :D

Recent Profile Visitors

746 profile views
  1. Welches Betriebssystem nutzt du? Am besten mal das ganze System auflisten also mit Hardware usw. Das kann an allem liegen, da muss man dann mal genauer gucken.
  2. NullReferenceException kommt, wenn z.B. in einem deiner Objekte ein Verweis fehlt. Hier steht ja, dass für Steam VR kein "pose Action" gesetzt wurde. Ich kann dein Objekt nicht sehen aber gucke doch mal, ob in einem Objekt dort die Referenz fehlt. Wie auf dem Bild zu sehen z.B. die Cursor Datei. Wäre die nicht da, käme dort der selbe Fehler. Also einfach mal diese Felder alle prüfen.
  3. Hallo, hat jemand eine Idee wie ich einen FogOfWar auf einer Karte anzeigen kann? Ich habe ein Mount Object, in einem Radius um dieses Object soll der Nebel sich dann auflösen. Prinzipiell wollte ich ein Bild (Sprite) über die Map legen welcher dann immer weiter offen gelegt wird. Im Anhang ist ein Ausschnitt der WorldMap, es ist PixelArt, so soll auch der FoW sein. Hat jemand eine Idee? Habe leider nicht wirklich was brauchbares gefunden, nicht mal im offiziellen Unity Forum.
  4. Falls es jemand wissen möchte, habe mittlerweile eine Lösung gefunden. InputAction.WorldMap.Mountmovement.performed += ctx => _mouseDoubleClick = ctx.action.triggered; Man kann das ganze auch direkt an eine Methode binden: Beispiel: InputAction.WorldMap.Focusmount.performed += FocusMount; private void FocusMount(InputAction.CallbackContext ctx) { transform.position = new Vector3(Mount.transform.position.x, Mount.transform.position.y, transform.position.z); }
  5. Hallo Leute, hat sich schon jemand mit dem neuen Input System beschäftigt? Aktuell versuche ich ein true zu bekommen, wenn ich ein Doppelklick mit der linken Maustaste auf irgendeiner Fläche mache. Der Code zum auslesen sieht so aus: InputAction.WorldMap.MountMovement.performed += ctx => _mouseDoubleClick = ctx.ReadValueAsButton(); Leider funktioniert das so nicht. Auch andere Möglichkeiten bringen das Problem, dass "true" bleibt, wenn einmal ein Doppelklick gemacht wurde, dies soll aber nur ein einziges true zurückgeben.
  6. Okay, dann muss ich da noch mal genauer gucken, da scheint ein Problem zu sein. Danke.
  7. So, hab nun mal die Scriptable Object verwendet. Das Problem hier war, dass man nicht mehr speichern kann. Ich habe BinaryFormatter() verwendet. Dann aufgrund der Scriptable Object zusätzlich noch JsonUtility.ToJson und JsonUtility.FromJson, was jedoch trotzdem nicht funktioniert. Offensichtlich kann ich keine Scriptable Object Listen speichern. Verwendet das hier noch wer und speichert diese?
  8. Okay, ich habe es schon fast beführtet, dass ich das keine super schöne Sache hin bekomme. Ich werde einfach mal mit einer Variante anfangen und es testen. Das Ui neu bauen, wenn etwas geändert wurde ist sicherlich nicht das beste, sobald die Items auf 100-200 steigen, könnte das vielleicht etwas länger dauern alles.
  9. Das Problem mit der Übersicht kenne ich auch. Es gibt immer wieder mal kleine Möglichkeiten wie [ReadOnly] oder ähnliches zu verwenden aber so richtig Struktur schaffen ohne direkt ein Fass auf zu machen habe ich leider auch nicht gefunden. Wirklich schade.
  10. Hi, ich habe mich erst wenig mit Isometrischen Games beschäftigt, vielleicht ist es aber dennoch nützlich. Es ist ja möglich im Tilemap Renderer -> Sorting Layer und Order in Layer einzustellen. Für mein Sidescroller habe ich das z.B. so gelöst, dass ich für Vorn, mittig und hinten eigene Tilemaps verwende. Du könntest also deine Lampe in mehreren Tilemaps verwernden, die eine für hintere Dinge und die andere für die Front. Ich bin mir sicher so ähnlich war das auch beim RPG Maker damals, das man die Tilemaps auf verschiedenen Ebenen benutzt hat.
  11. Vielen Dank für die außerordentlich umfangreichen Antworten. Zum Verständnis, welche Anforderungen ich selber habe: Es ist ein klassisches Inventar Viele Items sind Individuell, wie z.B. bei Diablo Stapelbar ist eine Möglichkeit, diese lässt sich für mich aber ohne Probleme hinzufügen Das Inventar selbst (im Charakter so zu sagen) ist kein Problem, natürlich kann ich da alles hinzufügen oder entfernen. Nur die Verbindung zum Ui ist für mich problematisch. Ein Beispiel: Wie schaffe ich es z.B. wenn ich ein Item per Drag and Drop mit einem anderen im Inventar tausche, dass es im Inventar selbst auch passiert? Aktuell treten genau hier immer wieder Probleme auf, da ich beide Inventare separat updaten muss, was zu Fehlern führt, da nicht die gleichen Items. Wie schon geschrieben, habe ich das Inventar selbst und ein Ui Inventar, dadurch stoße ich jedoch immer wieder auf Schwierigkeiten. Außerdem fühlt es sich nicht sauber programmiert an. Gibt es vielleicht eine Möglichkeit direkt auf das Inventar ohne Ui Inventar zuzugreifen? Lädt man vielleicht das ganze Inventar immer neu, sobald eine Änderung vorgenommen wurde? (Wobei das nicht schön klingt) Mein großes Problem ist halt die Verbindung zwischen Charakter Inventar und dem Ui. PS: Scriptable Object werde ich mir auf jeden Fall noch einmal genauer angucken.
  12. Hi, danke für deine Antwort. Was genau meinst du mit den Dictionary, ich mein das ist ja auch eine Art Sammlung / Liste nur mit definierten key und value. Scriptable Objects kenne ich tatsächlich und war da damals auf massive Probleme gestoßen. Ich denke jedoch, ich muss meine gesamte Struktur noch einmal überarbeiten und wirklich versuchen Scriptable Objects einzusetzen. Das mit den Namespaces ist so eine Sache. Aktuell habe ich Klassen die gleich heißen, daher ist es unumgänglich. Bislang hatte ich auch noch keine Probleme damit, sind dir welche Bekannt die ich beachten sollte?
  13. Hallo Leute, aktuell arbeite ich an einem Inventar. In meinem Spiel wird es viele verschiedene Items geben. Ähnlich wie Diablo oder Borderlands mit zufälligen Eigenschaften. Mein Problem liegt darin, dass ich zwei Listen führe und die eine oft mit der anderen nicht übereinstimmt. Mittlerweile bin ich auf Arrays umgestiegen, da ich da einfacher mit dem Index arbeiten konnte, dachte ich. Leider habe ich da auch noch nicht das erwünschte Ergebnis erzielen können. Gibt es hier nicht eine bessere oder einfacherer Lösung? Aktuell fällt mir nur nichts elegantes ein, wenn ich ehrlich bin. Hier mal meine aktuellen Skripte: Inventar: using UI; using UnityEngine; namespace Game.Player { public class Inventory : MonoBehaviour { [ReadOnly] public UiInventory InventoryUi; private Item.Item[] _inventory; private void Start() { _inventory = GetComponent<Player>().Stats.Inventory; //Array.Resize(ref _player.Stats.Inventory, _player.Stats.InventoryCapacity); } public bool AddItem(Item.Item itemToAdd) { for (var i = 0; i < _inventory.Length; i++) { if (_inventory[i] == null) { _inventory[i] = itemToAdd; InventoryUi.SetSlot(i, itemToAdd); return true; } } return false; } public void RemoveItem(Item.Item itemToRemove) { for (int i = 0; i < _inventory.Length; i++) { if (_inventory[i] == itemToRemove) { _inventory[i] = null; InventoryUi.SetSlot(i, null); return; } } } public void SetInventoryUi(UiInventory inventoryUi) { InventoryUi = inventoryUi; if (InventoryUi != null) InventoryUi.SetInventoryUi(_inventory); else Debug.LogWarning("Player has no InventoryUi object reference"); } } } Inventar Ui: using System; using System.Collections.Generic; using Game.Item; using UnityEngine; using UnityEngine.UI; namespace UI { public class UiInventory : MonoBehaviour { public GameObject Ui; public List<UiItem> UiItems = new List<UiItem>(); public GameObject SlotPrefab; public Transform SlotPanel; public GameObject SelectedItem; public GameObject ItemRemoveArea; public GameObject Tooltip; public void SetInventoryUi(Item[] items) { if(SelectedItem != null) SelectedItem.GetComponent<Image>().sprite = null; foreach (Transform slot in SlotPanel.transform) { Destroy(slot.gameObject); } UiItems.Clear(); for (var i = 0; i < items.Length; i++) { var instance = Instantiate(SlotPrefab); instance.transform.SetParent(SlotPanel); instance.transform.localScale = Vector3.one; instance.transform.localPosition = new Vector3(0,0,0); if (SelectedItem != null) instance.GetComponentInChildren<UiItem>().SelectedItem = SelectedItem.GetComponent<UiItem>(); instance.GetComponentInChildren<UiItem>().Tooltip = Tooltip.GetComponent<Tooltip>(); instance.GetComponentInChildren<UiItem>().Ui = Ui; instance.GetComponentInChildren<UiItem>().SlotIndexNumber = i; UiItems.Insert(i, instance.GetComponentInChildren<UiItem>()); if (items[i] != null) UiItems[i].SetItem(items[i]); } } public bool SetSlot(int index, Item item) { try { UiItems[index].SetItem(item); return true; } catch (Exception ex) { Debug.LogWarning(ex.Message); } return false; } } } Ui Item: using Game.Item; using Game.Player; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace UI { public class UiItem : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler { // INFOS: https://medium.com/@yonem9 public GameObject Ui; public UiItem SelectedItem; public Tooltip Tooltip; public bool IsItemDeleter; public GameObject ItemObjectPrefab; private Image _spriteImage; [ReadOnly] public int SlotIndexNumber; [ReadOnly] public Item Item; private void Awake() { if (!IsItemDeleter) _spriteImage = GetComponent<Image>(); SetItem(null); } public void SetItem(Item item) { Item = item; if (Item != null) { _spriteImage.color = Color.white; _spriteImage.sprite = Resources.Load<Sprite>("Sprites/Items/" + Item.SpriteName); } else { if(!IsItemDeleter) _spriteImage.color = Color.clear; } } public void OnPointerClick(PointerEventData eventData) { var inventory = Ui.GetComponent<UiController>().MainGameObject.GetComponent<MainGameController>() .CurrentPlayerObject.GetComponent<Inventory>(); if (IsItemDeleter && SelectedItem.Item != null) { var positionWithNull = Ui.GetComponent<UiController>().MainGameObject.GetComponent<MainGameController>() .GetWorldPositionOnPlane(Input.mousePosition, 0); if (positionWithNull == null) return; var position = (Vector3) positionWithNull; inventory.RemoveItem(SelectedItem.Item); ItemController.Drop(Ui.GetComponent<UiController>().MainGameObject, ItemObjectPrefab, position, SelectedItem.Item, 2); SelectedItem.SetItem(null); return; } // Slot: FULL - Selected: FULL if (Item != null && SelectedItem.Item != null) { var clone = new Item(SelectedItem.Item); SelectedItem.SetItem(Item); inventory.AddItem(clone); } // Slot: FULL - Selected: EMPTY if (Item != null && SelectedItem.Item == null) { SelectedItem.SetItem(Item); inventory.RemoveItem(Item); } // Slot: EMPTY - Selected: FULL if (Item == null && SelectedItem.Item != null) { SetItem(SelectedItem.Item); inventory.AddItem(SelectedItem.Item, SelectedItem.SlotIndexNumber); SelectedItem.SetItem(null); } } public void OnPointerEnter(PointerEventData eventData) { if (Item != null) Tooltip.Show(Item); } public void OnPointerExit(PointerEventData eventData) { if(Tooltip != null) Tooltip.gameObject.SetActive(false); } } }
  14. Alles klar, vielen Dank erst einmal für die Infos. Ja, das Problem mit dem Arbeitsspeicher habe ich definitiv ganz oben auf meiner Liste.
  15. Hallo Leute, ich habe mal eine Grundlegende Frage. Wenn ich eine 3D-Welt erstellen möchte, welche so groß ist, dass sie nicht direkt komplett geladen werden kann, wie mache ich das am besten? Ich habe da Spiele wie GTA im Hinterkopf, welche die Umgebung ja nachladen, je nachdem wo man sich aufhält. Soweit so gut. Wenn ich so eine statische Welt habe, welche nicht generiert wird, können die Objekte dann einfach schon da sein nur deaktiviert und werden dann keine Ressourcen verbrauchen? Davon abgesehen, wie löse ich es am besten, so dass ich weiß, wann welche Objekte geladen werden, aufgrund von Entfernung? Collider Bereich um den Spieler drum herum? Hat hier jemand etwas Erfahrung und kann mir ein paar Informationen geben oder Stichpunkte, nach denen ich suchen sollte?
×
×
  • Create New...