Vielleicht mal mit ner Rotation versuchen!

Ich habe keine Ahnung was du da tust, aber einen Teleportation hört sich schon rein logisch falsch an.

Bei Rigidbody einen Force drauf geben, ansonsten mit Rotate oder RotateAround. Eines davon ist obsolete. Einfach mal die Scripting Referenz nutzen!

...zur Antwort
pickUp += Mathf.RoundToInt(float);

https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Mathf.RoundToInt.html

Je nach gewünschtem Runden der gehen hier auch Alternativen wie CeilToInt usw.

...zur Antwort

Vor allem als Anfänger empfielt sich immer Probleme in kleinere aufzuspalten.

Was ist ein Wort? Ein string oder ein char Array.

Was ist ein Array? Eine Ansammlung von Daten eines Datentypen oder einer Klasse in einer Art Tabelle.

Nun überlege: Wie zerlege ich nun ein Wort in einzelde Buchstaben?

Welche Funktionen bietet C# vielleicht schon dafür an?

string dasWort = "Baum";//das zu spiegelnde Wort
string dasGespiegelteWort ="";

string[] dasZerlegteWort = dasWort.Select(bs => bs.toString()).toArray();

Jetzt haben wir oben eine Array des gesuchten Baums zerlegt über die sogenannte Lamda Expression. Zu finden im System.Linq namespace.

Nun muss das zerlegte Wort gespiegelt oder auch "umgekehrt" werden.

Englisch ist dein Freund! Umkehren kann man mit Reverse übersetzen und auch hier gibts es schon fertige Funktion oder nicht? z.b.

Array.Reverse(dasZerlegteWort);

Das geht auch auf sehr vielen anderen Wegen!

z.b. über eine Rückwärtslaufende For-Schleife:

for(int i == dasZerlegteWort.Length-1;i>=0;i--)
{
  dasGespiegelteWort += dasZerlegteWort[i];
}

Beschäftige dich doch einfach mal mit den Sachen, Du wirst sehen, so schwer ist das nicht.

...zur Antwort
Unity Character Controller verbuggt?

Hey Leute,

ich habe mir gerade dieses:

(44) Basic Third Person Character Controller in Unity - Unity C# Tutorial 2022 - YouTube

Tutoral für third person controller angeschaut. Nach programmierung der Scripts habe ich aber zwei Bugs:

Mein Character "slided" weiter über den Boden auch wenn ich aufhöre w zu drücken. Man kann sich das vorstellen wie auf einer Eisbahn.

Obwohl ich eine Rigidbody eingefügt habe, fällt der Character nicht auf den Boden! Mein leicht abgeänderter Code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
  public Animator playerAnim;
  public Rigidbody playerRigid;
  public float w_speed, wb_speed, olw_speed, rn_speed, ro_speed;
  public bool walking;
  public Transform playerTrans;
  void FixedUpdate()
  {
    if (Input.GetKey(KeyCode.W))
    {
      playerRigid.velocity = transform.forward * w_speed * Time.deltaTime;
    }
    if (Input.GetKey(KeyCode.S))
    {
      playerRigid.velocity = -transform.forward * wb_speed * Time.deltaTime;
    }
  }
  void Update()
  {
    if (Input.GetKeyDown(KeyCode.W))
    {
       playerAnim.SetTrigger("walk");
       playerAnim.ResetTrigger("idle");
       walking = true;
       //steps1.SetActive(true);
    }
    
    if (Input.GetKeyUp(KeyCode.W))
    {
      playerAnim.ResetTrigger("walk");
      playerAnim.SetTrigger("idle");
      walking = false;
  //steps1.SetActive(false);
    }
    
    if (Input.GetKeyDown(KeyCode.S))
    {
      playerAnim.SetTrigger("walk");
      playerAnim.ResetTrigger("idle");
      walking = true;
    }
    
    if (Input.GetKeyUp(KeyCode.S))
    {
      playerAnim.ResetTrigger("walk");
      playerAnim.SetTrigger("idle");
      walking = false;
    }
    
    if (Input.GetKey(KeyCode.A))
    {
      playerTrans.Rotate(0, -ro_speed * Time.deltaTime, 0);
    }
    
    if (Input.GetKey(KeyCode.D))
    {
      playerTrans.Rotate(0, ro_speed * Time.deltaTime, 0);
    }
  }
}

Danke für alle Antworten

...zum Beitrag

Wenn ich jetzt raten müsste, würde ich sagen, du wertest "walking" nicht aus.

sowas wie:

if(!walking)
{
  playerRigid.velocity = Vector3.zero;
}

Alternativ warum der player nicht runterfällt, hat ggf. was mit der Einstellung: useGravity im Rigidbody zu tun oder der Mass (Masse).

...zur Antwort
SceneManager.GetActiveScene().name;

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.GetActiveScene.html

...zur Antwort

Du brauchst die SDK um ein Build zu erstellen.

Wie das geht steht hier:

https://docs.unity3d.com/Manual/android-sdksetup.html

und ggf noch das:

https://docs.unity3d.com/Manual/android-BuildProcess.html

...zur Antwort

Versuche den Trick mit der Alufolie. Das klappte bei mir ganz gut. also ein langes stabiles lineal suchen, was wirklich 100% gerade ist, sodass du einen Lichtspalt siehst, wo deine Wölbung nach unten ist.

  1. Bett vorheizen
  2. Lichtspalt prüfen
  3. Abklammern
  4. Stelle merken
  5. mehrfach gefaltete Alu folie drunterpacken
  6. Festklammern
  7. Lichtspalt prüfen

Solange 3-7 wiederholen bis das Ergebnis passt.

...zur Antwort

Das Canvas ist normal im Camera View zu sehen, es sei denn du bist im Free Aspect.

Bewegt man die Camera, sollte sich auch der Canvas bewegen, es sein denn es ist ein WorldSpace Canvas. Hier musst du dann die render Order berücksichtigen.

Ist es ein ScreenSpace Overlay Canvas sollte im Game View alles zu sehen sein.

Ist es ein Screen Space Camera, muss eine Camera erst zugewiesen werden.

Bild zum Beitrag

...zur Antwort

Sieht so aus als wäre Light Generation aus. Geh auf Window>Rendering>Light Settings und ganz unten ein Haken bei Auto reinmachen.

Kann auch sein, dass die Light Settings wo anders sind. Wer suchet der findet ;)

...zur Antwort

Ich hab deine Frage nicht komplett verstanden, also was nicht geht, oder was schon geht.

Vielleicht reicht es dir das Objekt einfach an den Spieler zu parentieren? das Rigidbody solltest du dann aber kinematic machen beim tragen.

transform.position = col.transform.position;
transform.SetParent(col.transform);
rb2D.isKinematic = true;

https://docs.unity3d.com/ScriptReference/Transform.SetParent.html

Beim werfen machst du das dann rückgängig, und gibst deine force drauf also:

Transform playerTransform = transform.parent;
transform.SetParent(null);
rb.isKinematic = false;

Vector2 direction = new Vector2(playerTransform.forward * power,-0.2f)
rb2D.AddForce(direction, ForceMode2D.Impulse);

Das ist jetzt alles ungetestet, aber so würde ich es versuchen.

https://docs.unity3d.com/ScriptReference/Rigidbody2D.AddForce.html

https://docs.unity3d.com/ScriptReference/Rigidbody2D.html

...zur Antwort

void Start()//<< diese Funktion muss immer groß geschrieben werden, wenn sie beim Start ausgeführt werden soll, weil sie Teil von Monobehaviour ist.

https://docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html

...zur Antwort

Das einfachste ist wohl einen Collider zu nutzen. Dann im OnTriggerEnter() OnTriggerStay() oder OnTriggerExit() ausführen was immer nötig ist.

Du kannst auch alle Gegner in Distanz holen mit Vector3.Distance() Dazu musst du dann aber alle kennen und irgendwo ablegen um messen zu können.

Oder nutzt den genannten Ray, und die Ray Länge musst du vorgeben als maximale. Origin ist der Spieler, direction eben die Position zu der gemessen werden soll. Und wenn der ray hitted mache dies ansonsten nichts.

...zur Antwort

Am besten speicherst du es irgendwo zwischen sobald du eine Instanz davon erstellst, und löschst es wann auch immer du musst.

GameObject tempObject;
public GameObject prefab;

void Erstelle()
{
tempObject = Instantiate(prefab);
}

void Lösche()
{
Destroy(tempObject);
}

Das kannst du auch mit mehreren machen, dazu diese einfach in einem Array oder einer List ablegen.

...zur Antwort

Es gibt eine menge Wege.

1.)Man nehme die Bounds eines Colliders und spawne darin.

https://docs.unity3d.com/ScriptReference/Collider-bounds.html

2.) man definiere eine Entfernung zu einem Objekt und spawne darin
Mein Beispiel bildet ein Quadrat ab, das geht auch als Rechteck oder Kreis usw.

Und bezieht sich genauso auf das derzeitige Objekt.

float entfernung = 3f;
float xpos = Random.Range(transform.position.x-entfernung, transform.position.x +entfernung,);
float ypos = Random.Range(transform.position.y-entfernung, transform.position.y +entfernung,);
Vector2 spawnPosition = new Vector2(xpos, ypos);

3.) Und es gibt sicher viele weitere Möglichkeiten.

Setze dich damit auseinander was ein Vector2/3 ist, nimm ein bissl Mathematik dazu, und schon wird das ganze verständlicher.

Nutze immer wenn möglich die Scripting Referenz.

...zur Antwort

Stelle dir doch mal vor du würdest das mit der Maus machen. Was brauchst du als erstes?

Maus Button gedrückt halten. Richtig

Was brauchst du jetzt?

Messen in welche Richtung die Maus bewegt wird. Richtig.

Wie messe ich das? Ich muss die Maus Position speichern, wo ich den ersten klick gemacht habe und kann jetzt von dort aus die distanz, auch delta genannt messen.

Das jetzt übertragen auf das zu bewegende Objekt ist dann der letzte Schritt.

...zur Antwort

Wie schon jemand zuvor schrieb erstelle einfach 2 floats.

float delay = 1f;
float counter = 0f;

Jetzt zählst du den counter permanent hoch.

counter += Time.deltaTime;

Und anschließend checkst du einfach gegen ob der counter höher als der delay ist.

if(counter>= delay)

Dann instantiierst du den Schuss und setzt counter wieder auf 0;

counter = 0;

Sollte es eher eine Dauerfunktion sein wo automatisch geschossen wird, empfiehlt sich eher eine Co-Routine.

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.