Jump to content
Unity Insider Forum

Triky313

Members
  • Content count

    104
  • Joined

  • Last visited

Community Reputation

3 Neutral

About Triky313

  • Rank
    Advanced Member

Profile Information

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

Recent Profile Visitors

564 profile views
  1. Triky313

    Player Inventar mit Ui und Drag and Drop

    Okay, dann muss ich da noch mal genauer gucken, da scheint ein Problem zu sein. Danke.
  2. Triky313

    Player Inventar mit Ui und Drag and Drop

    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?
  3. Triky313

    Player Inventar mit Ui und Drag and Drop

    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.
  4. 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.
  5. Triky313

    Isometric Tilemap Problem

    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.
  6. Triky313

    Player Inventar mit Ui und Drag and Drop

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

    Player Inventar mit Ui und Drag and Drop

    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?
  8. 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); } } }
  9. Alles klar, vielen Dank erst einmal für die Infos. Ja, das Problem mit dem Arbeitsspeicher habe ich definitiv ganz oben auf meiner Liste.
  10. 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?
  11. Hallo Leute, aktuell erstelle ich ein Konzept für ein Item System in meinem Spiel. Wie überall, stößt man auch hier gern mal auf Hindernisse. Das Item System soll ähnlich wie bei Borderlands oder sonstigen RPG Games mit Random Drops. Meine Aktuelle Idee sieht so aus: JSON (ItemRow Blueprint) -> CreateItem() -> GameObject(Item) Eine JSON Datei sieht zurzeit etwa so aus: [ { "Id": 1, "Name": "Master Sword", "ItemType": "Weapon", "WeaponType": "Sword", "EquipmentType": null, "ConsumableType": null, "MinStats": 2, "MaxStats": 3, "MaxStatsChance": 50, "Stats": [ { "Name": "Strength", "MinValue": 1, "MaxValue": 10, "MinMultiplier": 0.1, "MaxMultiplier": 0.2 }, { "Name": "Agility", "MinValue": 10, "MaxValue": 20, "MinMultiplier": 0, "MaxMultiplier": 0 }, { "Name": "Vitality", "MinValue": 1, "MaxValue": 5, "MinMultiplier": 0.1, "MaxMultiplier": 0.2 } ], "Raritys": [ { "Tier": 0, "Value": 0, "Multiplier": 0, "Chance": 100.0 }, { "Tier": 1, "Value": 5, "Multiplier": 0, "Chance": 50 }, { "Tier": 2, "Value": 7, "Multiplier": 0, "Chance": 25 }, { "Tier": 3, "Value": 10, "Multiplier": 0, "Chance": 12 }, { "Tier": 4, "Value": 20, "Multiplier": 0, "Chance": 6 }, { "Tier": 5, "Value": 50, "Multiplier": 0, "Chance": 3 } ] } ] Meine Fragen nun: Hat schon jemand Erfahrung mit Item Systemen solcher Art und hat vielleicht Tipps oder Ideen ob das ganze sauber und gut zu gestalten. Sollte ich für ein fertiges Item ein GameObject mit der Item Class verwenden oder z.B. eher auf Scriptableobject setzen? Unter anderem habe ich gerade noch das Problem, dass ich Item Typen wie Waffe, Rüstung oder Tränke habe, aber nur eine Item Klasse. Dadurch werden gewisse Eigenschaften wie Stärke nur auf Waffen verwendet aber nicht bei Tränken. Hier vielleicht mit Vererbungen arbeiten? (War der Meinung sowas sollte man vermeiden)
  12. Triky313

    Missing Prefabs

    Hat da echt keiner Probleme mit? Ich habe heute auf Arbeit alles + meta files hochgeladen per Git und direkt per Unity. Auf meinem neu installieren PC zuhause, bekomme ich das Projekt weder mit Git noch mit Unity Collab zum laufen. Irgendetwas stimmt doch da nicht. Alle Objekte die ein Prefab sind, werden als Missing angezeigt. Die Prefabs sind auch kaputt. Ich weiß nicht was ich machen soll, es gibt keine Möglichkeit an zwei verschiedenen Orten ein Projekt zu betreuen. Unfassbar ist das.
  13. Vielen Dank für deine Meinung. Das mit den Coins als Beispiel kann ich mir vorstellen. Bin mir nur nicht ganz sicher gewesen, ab wann es Probleme geben kann.
  14. Hi Leute, ich versuche gerade Grundlegende Dinge zu klären. Aktuell stehe ich vor der Frage, ob es so gut ist, wenn mein PlayerObject (In dem Fall 2D) viele Scripte mit Informationen und Funktionen hat? Als Beispiel: StatusWerte direkt im Player oder lieber in einem MainController speichern? Gleiches bei Items die ein PlayerObject besitzt. Kann es da zu Problemen führen, hat da schon jemand Erfahrung mit gesammelt? Aktuell hat mein PlayerObject nur 4 Klassen aber trotzdem kann das ja schnell mal mehr werden.
  15. Triky313

    Missing Prefabs

    Hallo Leute, habe gestern meinen PC aufgrund von neuer Hardware neu aufgesetzt. Nun ist es so, dass ich ein Unity-Projekt per Windows Wiederherstellung zurück geholt habe. Zudem gibt es ein Git Repo, wo das ganze auch noch mal vorhanden ist. Prinzipiell wurde alles gesichert und trotzdem habe ich überall Missing Prefabs. Davon abgesehen sind meiner Meinung nach alle Meta Daten vorhanden, ich bin etwas Ratlos. Auch das löschen der Libarary habe ich schon gemacht und dann neu gestartet... leider ohne Erfolg. Hat da jemand eine Ahnung was ich machen kann oder wie ich so etwas in Zukunft vermeiden kann? Im Prinzip ist dadurch mein ganzen Projekt im Eimer. Prefabs sind vorhanden aber angeblich beschädigt.
×