Wie kann ich in Unity 3D die Position speichern und wieder Aufrufen?

Hallo, ich bin 15 benutze die Engine "Unity" seit ungefähr 2einhalb Jahren. Ich habe vor einigen Wochen ein Projekt gestartet, wo es darum geht, durch einen Trigger zu gehen wie ein Portal und dann auf verschiedenen Planeten zu landen und diese zu Erkunden. Kurz gesagt geht es um die Erkundung von Planeten. Jeder Planet hat eine eigene Szene und ich benutze DontDestroyOnLoad damit z.B. In Game Optionen gespeichert werden bzw. Nicht zerstört werden, wenn man die Szene wechselt. Nun habe ich aber vor das wenn man das Spiel verlässt, und wieder das Spiel startet man nicht von vorne beginnen muss und wieder im Hauptmenü landet sondern dort weiter machen kann wo man aufgehört hat. Das sozusagen die Position gespeichert wird und man sofort im Spiel landet. Aber ich habe keine Ahnung, wie ich das hinbekommen soll. Mir kam da evtl. PlayerPrefs in den Sinn aber die speichern wenn dann auch nur beispielsweise die In Game Optionen wie Grafikeinstellungen oder Sound. Können PlayerPrefs auch die Position speichern und die Szene in der man zuletzt war? Es ist nicht einfach PlayerPrefs, DontDestroyOnLoad usw. Zu verstehen, habe mir auch die ganze Nacht den Kopf drüber zerbrochen. Deswegen versuche ich mein Glück hier und hoffe, dass man mir weiter helfen kann. Freue mich auf alle Antworten!

Spiele, PC, Technik, programmieren, C Sharp, Spieleentwicklung, Unity 3D, Unity
Ist es sinnvoll immer wieder neue Szenen in Unity zu erstellen?

Hallo, ich habe in Unity ein Projekt (3D) vor einigen Monaten gestartet. In diesem Projekt bzw. Spiel geht es darum, Planeten bzw. die Atmosphäre der Planeten, einschließlich Exoplaneten zu erkunden, die so realistisch wie möglich versucht werden dar zu stellen. Ich arbeite an dem Projekt alleine. Nun möchte ich mit dem Arbeiten an den Planeten bzw. Terrains beginnen und habe vor für jeden einzelnen Planeten (die Planeten bestehen nur aus Terrains) eine neue Szene zu machen. Also beispielsweise, ich habe 200 neue Szenen gemacht und in jeder Szene sind die Unterschiedlichen Terrains, die die Atmosphäre der Planeten darstellen soll, die man erkundet. Also 200 Szenen für 200 Planeten. Aber ist das die schlauste oder beste Herangehensweise? Ich meine, für jedes Terrain eine neue Szene zu erstellen sodass es irgendwann nicht mehr übersichtlich ist, ist doch nicht die beste Methode, oder? Ich habe jedoch keine Ahnung, wie ich es viel einfacher machen könnte und bei einem Update nicht jede Szene überschreiben müsste, wie Dynamische Generierung oder so. Ich bin noch relativ neu in Unity. Fazit: Ich möchte nicht unendlich viele Szenen erstellen müssen, sondern eine übersichtlichere Methode finden, um Terrains in Unity zu machen und nicht pro Terrain eine komplett neue Szene machen zu müssen. Wie Dynamische Generierung oder Scene Management, habe aber keine Ahnung wie das funktioniert. Kennt jemand eine übersichtlichere, leichtere oder Schlauere Methode? Wenn ja, würde es mir sehr weiter helfen. Danke für alle Antworten.

Spiele, Computer, programmieren, C Sharp, Spieleentwicklung, Unity 3D, Unity
Wie kann ich die Fehler von PHP einzeln in der Unity-Konsole ausgeben?

Hallo,

wie schaffe ich es, die Fehler zu splitten und wenn es z.B. zwei Fehler sind, beide einzeln in Unity in der Konsole auszugeben?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using TMPro;
using System;
using Newtonsoft.Json;

public class RegisterUser : MonoBehaviour
{
  public TMP_InputField EmailInput;
  public TMP_InputField UsernameInput;
  public TMP_InputField PasswordInput;

  private void Update()
  {
  }

  public void RegisterButton()
  {
    StartCoroutine(Register(EmailInput.text, UsernameInput.text, PasswordInput.text));
  }

  IEnumerator Register(string email, string username, string password)
  {
    string url = "geheim";

    WWWForm form = new WWWForm();
    form.AddField("email", email);
    form.AddField("username", username);
    form.AddField("password", password);

    using (UnityWebRequest www = UnityWebRequest.Post(url, form))
    {
      yield return www.SendWebRequest();

      if www.result != UnityWebRequest.Result.Success)
      {
        Debug.Log("Error: " + www.error);
      }
      else
      {
        // hier Fehler checken
      }
    }
  }
}

Meine PHP if-Abfrage, wo mögliche Fehler ermittelt werden:

if (blablazeug) {
  if ($resultemail->num_rows > 0) {
    echo  "1"; // errorcode for already used email
  }

  if ($resultuser->num_rows > 0) {
    echo  "2"; // error code for already used username
  }

  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo  "3"; // error code for wrong email
  }

  if (strlen($username) < 4 || strlen($username) > 10 || !preg_match('/^[a-zA-Z0-9]+$/', $username)) {
    echo  "4"; // error code for wrong username conditions
  }

  if (strlen($password) < 6 || strlen($password) > 20 || !preg_match('/[0-9]+/', $password) || !preg_match('/[A-Z]+/', $password) || !preg_match('/[a-z]+/', $password) || !preg_match('/[.,!@#$%^&*()\-_=+{};:?]+/', $password)) {
    echo "5"; // error code for wrong password conditions
  }

  die();
}
C Sharp, Error, PHP, Programmiersprache, Visual Studio, Unity
Unity Loginsystem mit PHP 500 Error?

Hallo, wisst ihr vielleicht warum dieser Code nicht funktioniert?

Ich habe einen Root Server mit MariaDB, PHP 8.2 und phpMyAdmin.

Das ist mein Servercode:

<?php

  $servername = "localhost";
  $username = "blabla";
  $password = "blabla";
  $dbname = "blabla";

  // variables submited by user
  $loginUser = $_POST["loginUser"];
  $loginPass = $_POST["loginPass"];

  // Create connection
  $conn = new mysqli($servername, $username, $password, $dbname);

  // Check connection
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  echo "Conected successfully, now we will show the users.<br><br>";

  $sql = "SELECT password FROM users WHERE username = " . $loginUser;
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    // output data of each row
    while ($row = $result->fetch_assoc()) {
      if ($row["password"] == $loginPass) {
        echo "login Success";
      }
      else {
        echo "wrong credentials";
      }
    }
  }
  else {
    echo "Username does not exist";
  }

  $conn->close();
?>

Das ist mein Unity-Code:

void Start()
{
  // A correct website page.
  StartCoroutine(Login("testuser", "123456"));
}

IEnumerator Login(string username, string password)
{
  WWWForm form = new WWWForm();
  form.AddField("loginUser", username);
  form.AddField("loginPass", password);

  using (UnityWebRequest www = UnityWebRequest.Post("http://blabla/Login.php", form))
  {
    yield return www.SendWebRequest();

    if www.result != UnityWebRequest.Result.Success)
    {
      Debug.Logwww.error);
    }
    else
    {
      Debug.Logwww.downloadHandler.text);
    }
  }
}

In Unity bekomme ich folgende Fehlermeldung:

Und wenn ich auf das PHP-Dokument im Internet gehe:

Danke für eure Hilfe.

Bild zum Beitrag
Webseite, Code, MySQL, PHP, Unity
Wie zeigt man Trophäen des Gegners mit Photon an?

Ich habe ein Multiplayer-Spiel mit Photon in der Unity Game Engine gemacht. Doch eine kleine Frage habe ich noch:

Das Spiel ist etwa so aufgebaut, dass man in eine Lobby mit einen Gegner kommt, der ungefähr die gleichen Trophäenanzahl wie man selber hat. Für die Trophäen habe ich einen einfachen Integer im WonControllerScript zubereitet.

Im Matchmaker-Skript habe ich das hier stehen:

public void StartMatchmaking()
{
  playerTrophies = wonController.trophy;
  PhotonNetwork.NickName = userManager.nickName;
  PhotonNetwork.JoinRandomRoom(); // Suche nach einem Raum mit maximal 2 Spielern
}

public override void OnJoinRandomFailed(short returnCode, string message)
{
  RoomOptions roomOptions = new RoomOptions();
  roomOptions.MaxPlayers = 2;

  // Überprüfe, ob der SpielerTrophies-Wert korrekt initialisiert wurde
  if (playerTrophies >= 0)
  {
    // Benutzerdefinierte Raum-Eigenschaften für die Lobby setzen
    roomOptions.CustomRoomPropertiesForLobby = new string[] { "Trophies" };
    // Benutzerdefinierte Raum-Eigenschaften festlegen
    ExitGames.Client.Photon.Hashtable customRoomProperties = new ExitGames.Client.Photon.Hashtable();
    customRoomProperties.Add("Trophies", playerTrophies);
    roomOptions.CustomRoomProperties = customRoomProperties;
  }

  PhotonNetwork.CreateRoom(null, roomOptions, TypedLobby.Default);
}

Jetzt möchte ich, dass zwei Texte einmal den eigenen Trophäenwert anzeigen und zum anderen (der zweite Text) den Trophäenwert des Gegners anzeigt. Wie geht das?

C Sharp, Trophäen, Unity
Was genau beeinflusst die Festplatte die allgemeine Performance des Laptops bei Gaming und Entwicklung?

Hallo!
Ich überlege meinen Laptop aufzurüsten, da die internen 500 GB (SSD) langsam aber sicher zur Neige gehen. Einen weiteren Slot für eine Festplatte hat der Laptop nicht, und da ich wenig Lust habe, die vorhandene auszutauschen (und somit das OS komplett neu aufzusetzen) habe ich mir überlegt eine externe SSD anzuschaffen.

Den Laptop nutze ich hauptsächlich für folgendes:

Im Internet surfen: ChatGPT, Streaming auf Netflix und co...

Zocken:
von A bis Z ist hier alles vertreten.Ob No Name Pixel Art Indie Game, oder Hogwarts Legacy Marathon

Bildbearbeitung: Hauptsächlich handelt es sich hier um 2D Sprites die ich erstelle. Ich wollte mir in Zukunft allerdings auch Blender und somit die 3D Modellierung genauer anschauen

Unity: Spieleentwicklung auf Anfänger Niveau. Sprich, ich kann noch nichts optimieren, habe zwanzigtausend Tabs mit Tutorials nebenher geöffnet, und viele Projekte existeren aus Angst vor Datenverlust mehrmals zu verschiedenen Zeitpunkten , sodass die Menge an Daten, die gespeichert werden wollen, schnell nach oben schießt, grade bei vielen Assets.

Joa, jetzt frage ich mich natürlich, auf was ich beim Kauf achten muss, und welche Aspekte meines täglichen Nutzens von der Festplatte beeinflusst werden. Logisch, dass ich mehr Speicherplatz bekomme......aber beispielsweise unterscheiden sich die Schreibgeschwindkeiten extremst und das kommt mir alles etwas Spanisch vor :D

Ich habe übrigens USB 3.0 falls das relevant ist?
Nun....danke für eure Hilfe!!! (=

Gaming, externe Festplatte, noob, Performance, Speicherplatz, SSD, Unitymedia, Solid-State-Drive, Unity, USB 3.0, Unity2D, Laptop
Box collider funktioniert nicht mit rb.MovePosition?

Ich habe mit Unity angefangen und habe ein kleines problem:
Und zwar habe ich eine kamera mit boxcollider und einen terrain mit terraincollider. Nur leider kann ich die kamera durch das terrain durchschieben! Ich habe schon den verdacht dass es an rb.MovePosition liegt aber weiß nicht wie ich das reparieren kann! Alles wie zumbeispiel rigidbody sind auf der kamera da bin ich mir sicher! Es kommt auch kein Fehler in der Konsole!
Mein Kompletter code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SmoothMove : MonoBehaviour
{
   public float rotationSpeed = 2.0f;
   public float smoothRotationFactor = 5.0f;
   private float yaw = 0.0f;
   private float pitch = 0.0f;

   public float jumpForce = 10.0f;
   public float moveSpeed = 20.0f;
   private Rigidbody rb;
   private bool isMovingForward = false;

   private void Start()
   {
       rb = GetComponent<Rigidbody>();
   }

   private void Update()
   {
       HandleCameraRotation();

       if (Input.GetKeyDown(KeyCode.Space))
       {
           Jump();
       }

       if (Input.GetKeyDown(KeyCode.UpArrow))
       {
           StartMovingForward();
       }

       if (Input.GetKeyUp(KeyCode.UpArrow))
       {
           StopMovingForward();
       }

       if (isMovingForward)
       {
           MoveForward();
       }
   }

   private void HandleCameraRotation()
   {
       if (Input.GetMouseButton(0))
       {
           yaw += rotationSpeed * Input.GetAxis("Mouse X");
           pitch -= rotationSpeed * Input.GetAxis("Mouse Y");
           Quaternion targetRotation = Quaternion.Euler(pitch, yaw, 0.0f);
           transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * smoothRotationFactor);
       }
   }

   private void Jump()
   {
       rb.velocity = new Vector3(rb.velocity.x, rb.velocity.y + 5, rb.velocity.z);
   }

   private void StartMovingForward()
   {
       isMovingForward = true;
   }

   private void StopMovingForward()
   {
       moveSpeed = 20f;
       isMovingForward = false;
   }

   private void MoveForward()
   {
       moveSpeed += 0.1f;
       Vector3 forwardDirection = transform.forward;
       forwardDirection.y = 0.0f; // Keep movement on the horizontal plane
       rb.MovePosition(rb.position + forwardDirection * moveSpeed * Time.deltaTime);
   }
}

Ich würde mich sehr freuen wenn ihr mir helft. Danke :)

C Sharp, Code, Programmiersprache, Spieleentwicklung, Unity 3D, Visual Studio, Unity
Weirder fehler bei Unity?

hi leute, ich habe mal wieder ein problem (was war auch anderes zu erwarten...) und diesmal handelt es sich um Unity.

die sache ist die, ich habe von unity hub die version 3.5.0 und der unity editor den ich installiert habe ist version Unity 2022.3.7f1.

das tut aber leider nix zur sache, denn egal welche editor version ich nutze, der fehler ist derselbe und jedesmal aufs neue bestehend.

denn das eigentliche problem um was es geht, das mich daran hindert unity zu nutzen ist folgendes: ich öffe unity hub und erstelle ein komplett frisches projekt. ich habe keine vorherigen mehr, da ichdiese alle gelöscht habe.

dann wähle ich 3d projekt aus und warte, bis alle dateien fertig geladen und kopiert wurden (oder was da auch immer passiert) und sobald unit fertig mit laden ist wird der unity editor geöffnet (also wie gewohnt) aber das ganze sieht so aus:

es ist folgendermaßen:

ich klicke auf den x button, es lädt und kurz darauf schließt sich der editor. da einzige was offen bleibt ist der unity hub. wenn ich auf den "Quit" button klicke passiert eins zu eins der selbe mist.

wenn ich jedoch auf den "continue" button klicke lädt es kurz und das selbe erschein erneut. es ist egal wie oft ich auf continue drücke, es erscheint immer wieder dieselbe nachricht.

kennt jemand eine lösung für das problem, wenn ja dann wäre ich euch echt verbunden.

(übrigens habe ich schon versuch unity komplett zu deinstallieren und danach wier neu zu installieren aber das problem besteht noch immer.)

vielen lieben dank im voraus.

Bild zum Beitrag
Windows, C Sharp, Error, Programmiersprache, Spieleentwicklung, Unity 3D, Plattform, Message, Unity, Windows 10
Hallo ich habe ein Code in Unity wo es eine Fehlermeldung gibt die ich nicht verstehe. Könnt ihr mir helfen?

Die Fehlermeldung lautet

Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand

Fehler CS1061 "Animation" enthält keine Definition für "SetBool", und es konnte keine zugängliche SetBool-Erweiterungsmethode gefunden werden, die ein erstes Argument vom Typ "Animation" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis). Assembly-CSharp C:\Users\Me\2d platform\Assets\Player.cs 27 Aktiv

Der ganze Code ist

public class Player : MonoBehaviour

{

  public float speed = 5;

  private Rigidbody2D rb;

  public float jumph = 5;

  private bool ig =false;

  private Animation anim;

  // Start is called before the first frame update

  void Start()

  {

    rb = GetComponent<Rigidbody2D>();

    anim = GetComponent<Animation>();

  }

  // Update is called once per frame

  void Update()

  {

    float richtung = Input.GetAxis("Horizontal");

    if(richtung != 0)

    {

      anim.SetBool("IsRunning", true);

    }

    else

    {

      anim.SetBool("IsRunning", false);

    }

    transform.Translate(Vector2.right * speed * richtung * Time.deltaTime);

    if (Input.GetKeyDown(KeyCode.Space) && ig)

    {

      rb.AddForce(Vector2.up * jumph, ForceMode2D.Impulse);

      ig = false;

    }

  }

  private void OnCollisionEnter2D(Collision2D collision)

  {

    if(collision.gameObject.tag == "g")

    {

      ig = true;

    }

  }

}

C Sharp, Code, Programmiersprache, Visual Studio, Unity, unity 2d

Meistgelesene Fragen zum Thema Unity