Jump to content
Unity Insider Forum

Thanny08

Members
  • Posts

    40
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Thanny08's Achievements

Advanced Member

Advanced Member (3/3)

0

Reputation

  1. Hat jetz alles bestens geklappt und bin mega happy ­čśü Jetzt als ,,Gutes " funktionierendes Script nochmal f├╝r alle die Sowas brauchen: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using TMPro; using UnityEngine.UI; public class Player : MonoBehaviour //Player Bewegung und Springen inkl Richtugswechsel und ├Ąhnliches { public float jumpForce = 10; //Sprungst├Ąrke deklarieren private Rigidbody2D rb; //Den Rigidbody des Players bekommen private bool canJump; //Darf Player springen? bool buttonHeldDown; //Den Animator des Players f├╝r die Jump Animation public int RespawnPlayer; public MovementJoystick movementJoystick; //Man braucht ein Panel(Bereich wo der joystick benutzt werden kann) mit 2 Images Die der innerer(Joystick) und ├Ąussere Teil des Joystick(JoystickBG) sind movementJoystick ist hier das komplette Panel: public float playerSpeed; private void Start() { rb = GetComponent<Rigidbody2D>(); //Player Rigidbody wird deklariert } void FixedUpdate() { Vector2 isVelocity = rb.velocity; // Hilfsvarable mit Werten vom rb f├╝llen if (movementJoystick.joystickVec.x != 0) { // wenn was am Joystick passiert dann... isVelocity.x = movementJoystick.joystickVec.x * playerSpeed; //nur den x-Wert der Variable ├╝berschreiben } if (buttonHeldDown && canJump) { // wenn der Button gedruckt ist und ich auch h├╝pfen darf... isVelocity.y = jumpForce; // nur den y-Wert der Variable ├╝berschreiben canJump = false; } rb.velocity = isVelocity; // der RB bekommt jetzt die neuen Werte komplett ├╝bergeben. Wurde kein Wert ├╝berschrieben, bekommt er die ausgelesenen Werte zur├╝ck } public void HoldButton() //Hold Methode f├╝r den Button => button wird gedr├╝ckt { buttonHeldDown = true; //Player springt } public void ReleaseButton() //Hold Methode f├╝r den Button => button wurde losgelassen { buttonHeldDown = false; //Player springt nicht mehr } void OnCollisionEnter2D(Collision2D collision) //Ber├╝hrt der Player den Boden? { canJump = true; //Wenn er den Boden ber├╝hrt, darf er springen } private void OnTriggerEnter2D(Collider2D other) //Respawn des Players { if (other.CompareTag("Respawn")) //Wenn Collider Den Tag "Tod" hat { SceneManager.LoadScene(RespawnPlayer); } } } Nochmal vielen vielen dank an @malzbie !!!
  2. Oh haha das h├Ątte ich echt sehen m├╝ssen! N├Ąchstes mal guck ich drei mal!!­čśü
  3. Vielen Vielen Dank f├╝r die schnelle Ausf├╝hrliche Antwort und Erkl├Ąrung! ^ Jedoch zeigt es mir bei dem x bei movementJoystick einen Fehler an, aus dem ich troz ├╝bersetzen nicht schlau geworden bin... Assets\C# SCRIPTS\Player.cs(33,45): error CS1061: 'MovementJoystick' does not contain a definition for 'x' and no accessible extension method 'x' accepting a first argument of type 'MovementJoystick' could be found (are you missing a using directive or an assembly reference?)
  4. Moin Moin, Ich habe ein Problemchen mit meinem Joystick und dem Springen. Den Joystick kann ich wie ich will benutzen (nur auf der x Achse), aber dann funktionier meine JumpFunktion pl├Âtzlich nicht mehr. Wenn ich die Joystick funktionen komplett entferne, so funktioniert das springen wieder. Scheint als w├╝rde Der Joystick das springen verhindern. M├╝sste demnach ein Fehler im Script sein. Habe troz langem Suchen nichts gefunden. Hier mein Script: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using TMPro; using UnityEngine.UI; public class Player : MonoBehaviour //Player Bewegung und Springen inkl Richtugswechsel und ├Ąhnliches { public float jumpForce = 10; //Sprungst├Ąrke deklarieren private Rigidbody2D rb; //Den Rigidbody des Players bekommen private bool canJump; //Darf Player springen? bool buttonHeldDown; //Den Animator des Players f├╝r die Jump Animation public int RespawnPlayer; public MovementJoystick movementJoystick; public float playerSpeed; private void Start() { rb = GetComponent<Rigidbody2D>(); //Player Rigidbody wird deklariert } void FixedUpdate() { if (movementJoystick.joystickVec.x != 0) { rb.velocity = new Vector2(movementJoystick.joystickVec.x * playerSpeed, 0); } else { rb.velocity = Vector2.zero; } } public void HoldButton() //Hold Methode f├╝r den Button => button wird gedr├╝ckt { buttonHeldDown = true; //Player springt } public void ReleaseButton() //Hold Methode f├╝r den Button => button wurde losgelassen { buttonHeldDown = false; //Player springt nicht mehr } void OnCollisionEnter2D(Collision2D collision) //Ber├╝hrt der Player den Boden? { canJump = true; //Wenn er den Boden ber├╝hrt, darf er springen } private void Update() //Die Bewegung und Das Springen { //Das Springen if (buttonHeldDown) //Wenn Button gedr├╝ckt wird { while (canJump) //wenn der Player springen Darf (Die While-Schleife wiedrholt sich st├Ąndig { if (canJump) { canJump = false; // Player darf nicht mehr springen (er soll ja nicht in der Luft springen k├Ânnen) rb.velocity = new Vector2(0f, jumpForce); //Neue Kraft (Das Springen) //playerAnimator.SetTrigger("JumpTrigger"); //Der Trigger f├╝r die Jump Anim wird gesetzt } } } } private void OnTriggerEnter2D(Collider2D other) //Respawn des Players { if (other.CompareTag("Respawn")) //Wenn Collider Den Tag "Tod" hat { SceneManager.LoadScene(RespawnPlayer); } } } Vieleicht kann mir ja jemand helfen... LG
  5. Hallo! Ich habe verrsuch die M├╝nzen einmal nur mit einem int einfach mal zu z├Ąhlen um das dann als Text im Level anzeigen zu lassen. Das hat nicht funktioniert. Dann habe ich versucht einfach jedes Mal wenn der Player den Coin ber├╝hrt etwas in der Konsole ausgeben zu lassen. Das hat auch nicht geklappt. public class CoinSystem : MonoBehaviour { public Text M├╝nzenanzahl; [SerializeField] private int coinId; [SerializeField] private string sceneName; private int coins; private void Start() { coins = 0; if (PlayerPrefs.GetInt($"Coin-{sceneName}-{coinId}", 0) == 1) { Destroy(gameObject); } M├╝nzenanzahl.text = coins.ToString(); } private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { Debug.Log("Hallo"); coins++; PlayerPrefs.SetInt("m├╝nzenAnzahl", coins); Destroy(GameObject.FindWithTag("Coin")); M├╝nzenanzahl.text = coins.ToString(); PlayerPrefs.SetInt($"Coin-{sceneName}-{coinId}", 1); } } } Es geht ja jetzt eigendlich alles ├╝ber die Variable coins, trozdem wird mir immer nur eine 1 angezeigt. Ich denke mal das liegt an meinem ID System? Weil das vieleicht einfach das gleiche ist, also alle coins...? Ich bin gerade echt ziemlich Ratlos...
  6. Perfekt! Vielen Dank es hat alles geklappt! Nur zwei Fragen h├Ątte ich noch: Wenn ich eine M├╝nze aufsammel wird +1 gerechnet. Das im Moment leider nur einmal. Wie kann ich diesen kleinen Fehler noch beheben? if (other.CompareTag("Player")) { PlayerPrefs.SetInt("m├╝nzenAnzahl", +1); //Habe hier gerade noch den Fehler gefunden das es nur 1x + 1 macht... wie kann ich das beheben } Und meine andere Frage ist: ich w├╝rde gerne auch Leuten helfen die vieleicht noch Anf├Ąngerlicher sind als ich, aber alles was ich im Forum finde, was ich beantworten k├Ânnte, wurde bereits beantwortet. Liegt es vlt daran das es weniger Unity Anf├Ąnger irgendwie gibt? Wobei ich mir das nicht vorstellen kann. Na ja wenn du vlt einen Tipp hast... Liebe Gr├╝├če und nochmals Danke!!
  7. Moin Erstmal vielen vielen Dank f├╝r die schnelle Antwort! Also im Prinzip habe ich das alles verestanden, ich wei├č nur nicht wie ich denn jetzt die eindeutige ID festlege. Gibt es da irgendwelche Components die extra daf├╝r da sind? Und wie kann ich dann diese ID in meinem Script aufrufen? ist das dann sowas in der Art oder liege ich damit ganz falsch? coinId = //Die Zahl oder eben Id die auf der Componente liegt private void Start() { if (PlayerPrefs.GetInt($"Coin-{sceneName}-{coinId}", 0) == 1) { Destroy(gameObject); } } private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Coin")) { m├╝nzenAnzahl++; Destroy(other.gameObject); M├╝nzenanzahl.text = m├╝nzenAnzahl.ToString(); PlayerPrefs.SetInt($"Coin-{sceneName}-{coinId}", 1); }
  8. Moin liebe Com, Und zwar habe ich ein Level in welchem M├╝nzen aufgesammelt werden k├Ânnen. Die M├╝nzen werden zerst├Ârt und der CoinCounter geht hoch. Bis jetzt alles gut. Wenn ich aber das Ende erreiche sollen die M├╝nzen f├╝r immer zerst├Ârt sein, also nicht bei Neustart wieder Sammelbar sein. private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Coin")) { m├╝nzenAnzahl++; Destroy(other.gameObject); M├╝nzenanzahl.text = m├╝nzenAnzahl.ToString(); } if (other.CompareTag("Finish")) { PlayerPrefs.SetInt("NumberOfCoins", + m├╝nzenAnzahl); //Und hier sollte noch ├╝bergeben werden das diese GameObjects f├╝r immer zerst├Ârt sind. } } F├╝r Hilfe w├Ąre ich dankbar! LG
  9. Okay dann versuch ich es weiter. Trozdem vielen Dank!
  10. Moin! Erstmal Danke f├╝r deine fixe Antwort! Egal was ich versucht habe, ich habe es nicht geschafft, Das Problem zu beheben. K├Ânntest du vieleicht die entsprechenden Codezeilen, einmal als Beispiel so umschreiben das der Fehler nicht mehr angezeigt werden m├╝sste? W├Ąre super nett!
  11. Hallo liebe Com, Beim erstellen meines Shop System in meinem Spiel, sind heute 2 Probleme aufgetreten. Zum einen erscheint, wenn ich nun in die Level Szene gehe (nur dann) , folgende Fehlermeldung: IndexOutOfRangeException: Index was outside the bounds of the array. ShopSystem.UpdateUI () (at Assets/Scrips/ShopSystem/ShopSystem.cs:71) ShopSystem.Update () (at Assets/Scrips/ShopSystem/ShopSystem.cs:54) Mein Script sieht in dieser Zeile so aus: public void UpdateUI() { PlayerBluePrint p = players[selectedOption]; //Es geht um diese Zeile if (p.isunlocked) { buyButton.gameObject.SetActive(false); } else { buyButton.gameObject.SetActive(true); buyButton.GetComponentInChildren<TextMeshProUGUI>().text = "Buy- " + p.price; if (p.price <= PlayerPrefs.GetInt("NumberOfCoins")) { buyButton.interactable = true; } else { buyButton.interactable = false; } } } private void Update() { UpdateUI(); //Und eben noch Update Methode weil dei Dort die ganze zeit ausgef├╝rt wird... } private void UpdateCharacter(int selectedOption) { Character character = characterDB.GetCharacter(selectedOption); artworkSprite.sprite = character.characterSprite; nameText.text = character.characterName; PlayerBluePrint p = players[selectedOption]; //Hier ist das Problem auch noch if (!p.isunlocked) { return; } Save(); } public void UnlockPlayer() { PlayerBluePrint p = players[selectedOption]; //Hier funktioniert es ohne Probleme PlayerPrefs.SetInt(p.name, 1); PlayerPrefs.SetInt("SelectedPlayer", selectedOption); p.isunlocked = true; PlayerPrefs.SetInt("NumberOfCoins", PlayerPrefs.GetInt("NumberOfCoins", 0) - p.price); } Nun wei├č ich nichjt woran das liegen k├Ânnte weil ich habe die gleiche zeile code auch woanders verbaut, und dort funktioniert es ohne Probleme. Na ja ich hab schon viel versucht und es nicht hinbekommen. F├╝r Hilfe w├Ąre ich sher dankbar! Das zweite Problem ist das Der Skin, wenn er nicht gekauft wurde trozdem in meiner LevelSzene spielbar ist. Habe das Problem nichjt gefunden.. Hier nochmal mein gesamtes Script f├╝r meinen Shop: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class ShopSystem : MonoBehaviour { public CharacterDatabase characterDB; public Text nameText; public SpriteRenderer artworkSprite; private int selectedOption = 0; public Text M├╝nzenAnzahl; public int m├╝nzenAnzahl; public PlayerBluePrint[] players; public Character[] characters; public Button buyButton; void Start() { PlayerPrefs.SetInt("NumberOfCoins", 40); m├╝nzenAnzahl = PlayerPrefs.GetInt("NumberOfCoins"); M├╝nzenAnzahl.text = m├╝nzenAnzahl.ToString(); foreach(PlayerBluePrint player in players) { if (player.price == 0) player.isunlocked = true; else player.isunlocked = PlayerPrefs.GetInt(player.name, 0) != 0; } M├╝nzenAnzahl.text = "100"; if (!PlayerPrefs.HasKey("selectedOption")) { selectedOption = 0; } else { Load(); } UpdateCharacter(selectedOption); } private void Update() { UpdateUI(); } public void NextOption() { selectedOption++; if (selectedOption >= characterDB.CharacterCount) { selectedOption = 0; } UpdateCharacter(selectedOption); Save(); } public void UpdateUI() { PlayerBluePrint p = players[selectedOption]; if (p.isunlocked) { buyButton.gameObject.SetActive(false); } else { buyButton.gameObject.SetActive(true); buyButton.GetComponentInChildren<TextMeshProUGUI>().text = "Buy- " + p.price; if (p.price <= PlayerPrefs.GetInt("NumberOfCoins")) { buyButton.interactable = true; } else { buyButton.interactable = false; } } } public void BackOption() { selectedOption--; if (selectedOption < 0) { selectedOption = characterDB.CharacterCount - 1; } UpdateCharacter(selectedOption); Save(); } private void UpdateCharacter(int selectedOption) { Character character = characterDB.GetCharacter(selectedOption); artworkSprite.sprite = character.characterSprite; nameText.text = character.characterName; PlayerBluePrint p = players[selectedOption]; if (!p.isunlocked) { return; } Save(); } public void UnlockPlayer() { PlayerBluePrint p = players[selectedOption]; PlayerPrefs.SetInt(p.name, 1); PlayerPrefs.SetInt("SelectedPlayer", selectedOption); p.isunlocked = true; PlayerPrefs.SetInt("NumberOfCoins", PlayerPrefs.GetInt("NumberOfCoins", 0) - p.price); } private void Load() { selectedOption = PlayerPrefs.GetInt("selectedOption"); } private void Save() { PlayerPrefs.SetInt("selectedOption", selectedOption); } } Vielen Dank schonmal im Vorraus f├╝r dei Hilfe!! Liebe Gr├╝├če
  12. Nun ja ich habe es versucht mit einem Button in der Scene, aber dann brauche ich eine M├Âglichkeit um, wenn man einen Charakter gekauft hat, beim n├Ąchstem Character nicht der gleiche Button bzw der Button zur├╝ckgesetzt wird, sodass nicht alles mit einmal kaufen gekauft wird. Also meine Frage: Wie soll ich das angehen mit dem einem Button in meiner Szene, damit eben jeder Charakter einzeln gekauft wird? LG
  13. Update: ICh habe es geschaftt einen Button zu implementieren mithilfe von: [SerializeField] GameObject kaufButton; Den ich in meine Database gezogen habe. Mein Problem jetzt: Der button wird nicht geupdatet sondern immer noch: wenn ich einmal kaufe habe ich alles gekauft. Hier mein Script: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CharacterManager : MonoBehaviour { public GameObject kaufButton; public CharacterDatabase characterDB; public Text nameText; public SpriteRenderer artworkSprite; private int selectedOption = 0; [SerializeField] GameObject Menu; [SerializeField] GameObject ShopPanel; // Start is called before the first frame update void Start() { if (!PlayerPrefs.HasKey("selectedOption")) { selectedOption = 0; } else { Load(); } UpdateCharacter(selectedOption); } public void NextOption() { selectedOption++; if(selectedOption>= characterDB.CharacterCount) { selectedOption = 0; } UpdateCharacter(selectedOption); Save(); } public void BackOption() { selectedOption--; if (selectedOption < 0) { selectedOption = characterDB.CharacterCount - 1; } UpdateCharacter(selectedOption); Save(); } private void UpdateCharacter(int selectedOption) { Character character = characterDB.GetCharacter(selectedOption); artworkSprite.sprite = character.characterSprite; nameText.text = character.characterName; kaufButton = character.kaufButton; } private void Load() { selectedOption = PlayerPrefs.GetInt("selectedOption"); } private void Save() { PlayerPrefs.SetInt("selectedOption", selectedOption); } public void MainMenu() { Menu.SetActive(true); ShopPanel.SetActive(false); } public void ShopMenu() { Menu.SetActive(false); ShopPanel.SetActive(true); } }
  14. Also das Problem liegt darin, das ich in die Database einen Button einf├╝gen will, welcher immer wenn ich auf Next oder auf Back dr├╝cke sich ├Ąndert. Ansonsten kauft man 1mal den Player und schon hat man alle skins. Mein Problem damit ist, das ich nicht wei├č wie ich einen Button in meine Database implementieren kann. Also ich wei├č nicht wo ich ansetzen soll.
  15. moin moin! also: ich versuche gerade in meine Database des Shops, einen Kauf Button hinzuzuf├╝gen. jedoch sind all meine Versuche gescheitert. Hat jmd vlt eine Idee wie ich das machen k├Ânnte? hier sind meine scripts: 1: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { //Player Auswahl public CharacterDatabase characterDB; public SpriteRenderer artworkSprite; private int selectedOption = 0; // Start is called before the first frame update void Start() { if (!PlayerPrefs.HasKey("selectedOption")) { selectedOption = 0; } else { Load(); } UpdateCharacter(selectedOption); } private void UpdateCharacter(int selectedOption) { Character character = characterDB.GetCharacter(selectedOption); artworkSprite.sprite = character.characterSprite; } private void Load() { selectedOption = PlayerPrefs.GetInt("selectedOption"); } } 2. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CharacterManager : MonoBehaviour { [SerializeField] GameObject KaufButton2; public CharacterDatabase characterDB; public Text nameText; public SpriteRenderer artworkSprite; private int selectedOption = 0; [SerializeField] GameObject Menu; [SerializeField] GameObject ShopPanel; // Start is called before the first frame update void Start() { if (!PlayerPrefs.HasKey("selectedOption")) { selectedOption = 0; } else { Load(); } UpdateCharacter ( selectedOption); } public void NextOption() { selectedOption++; if(selectedOption>= characterDB.CharacterCount) { selectedOption = 0; } UpdateCharacter(selectedOption); Save(); } public void BackOption() { selectedOption--; if (selectedOption < 0) { selectedOption = characterDB.CharacterCount - 1; } UpdateCharacter(selectedOption); Save(); } private void UpdateCharacter(int selectedOption) { Character character = characterDB.GetCharacter(selectedOption); artworkSprite.sprite = character.characterSprite; nameText.text = character.characterName; } private void Load() { selectedOption = PlayerPrefs.GetInt("selectedOption"); } private void Save() { PlayerPrefs.SetInt("selectedOption", selectedOption); } public void MainMenu() { Menu.SetActive(true); ShopPanel.SetActive(false); } public void ShopMenu() { Menu.SetActive(false); ShopPanel.SetActive(true); } } 3. using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class CharacterDatabase : ScriptableObject { public Character[] character; public int CharacterCount { get { return character.Length; } } public Character GetCharacter(int index) { return character[index]; } } F├╝r Hilfe w├Ąre ich sehr dankbar da ich gerade echt dort nicht weiterkomme!!! LG
×
×
  • Create New...