Unity 2D Abfragen ob schon Joystick betätigt wird?

Hey, ich mache gerade ein kleines 2D spiel in unity. Und habe ein kleines Script das wenn ich irgentwo drücke er da den Joystick erscheinen lässt. Nun möchte ich haber abfragen ob irgendwo auf dem display der Controller schon ist und wenn ja er den click ignorieren soll. Hier der Code:

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

public class Joystick : MonoBehaviour
{
  public Transform player;
  public float speed = 5.0f;
  private bool touchStart = false;
  private Vector2 pointA;
  private Vector2 pointB;

  public Transform circle;
  public Transform outerCircle;

  // Update is called once per frame
  void Update()
  {
    if (Input.GetMouseButtonDown(0))
    {
      pointA = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));

      circle.transform.position = pointA * 1;
      outerCircle.transform.position = pointA * 1;
      circle.GetComponent<SpriteRenderer>().enabled = true;
      outerCircle.GetComponent<SpriteRenderer>().enabled = true;
    }
    if (Input.GetMouseButton(0))
    {
      touchStart = true;
      pointB = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
    }
    else
    {
      touchStart = false;
    }

  }
  private void FixedUpdate()
  {
    if (touchStart)
    {
      Vector2 offset = pointB - pointA;
      Vector2 direction = Vector2.ClampMagnitude(offset, 1.0f);
      moveCharacter(direction * 1);

      circle.transform.position = new Vector2(pointA.x + direction.x, pointA.y + direction.y) * 1;
    }
    else
    {
      circle.GetComponent<SpriteRenderer>().enabled = false;
      outerCircle.GetComponent<SpriteRenderer>().enabled = false;
    }

  }
  void moveCharacter(Vector2 direction)
  {
    player.Translate(direction * speed * Time.deltaTime);
  }
}
Programmieren, C Sharp, Unity, unity 2d
0 Antworten
Blender - Warum glitchen die poligone rum?

Gemeint sind Animationen die nur aus 2 Keys bestehen und z.b. nur die Hand von einer Handfläche zu einer Faust animieren oder zu einem Stinkefinger etc.

also die üblichen Standard Animationen...

Wie kann ich also diesen Fehler verhindern, dass Kleidungsstücke oder Körperteile während der Animation wegglitchen wie auf dem ersten Screenshot hier unten?

Das passiert vorallem wenn ich ein Model nehme, ein Kleidungsstück an das Model heran weigte und später das Model in VRChat verwende. Sobald ich irgend etwas später deformieren sollte wie z.b. das beugen eines fingers oder mehrere Finger ein den Hals etc. glitchen die heran modelierten Kleidungsstücke heraus oder Körperteile wie auf dem Screenshot:

Woran liegt das und wie kann ich verhindern das sowas auftritt? wenn man reden tut über den Voicechat und dadurch sich die lippen bewegen beweckt sich ebenfalls dieser Poligon GLitch an dem bein benenfalls mit. Wenn der Character normal ist und keine Bones bewegt dann sieht das Model normal aus aber sobald man die Finger, den Arm oder anderweitige Körperteile bewegt dann glitcht immer das heran modelierte kleidungsstück zurseite weg wie in diesem fall es mit dem Bein ist.

Weiß einer warum das so ist und wie sich das verhindern lässt?

Ich gehe davon aus das es mit den "Vertex Groups" und "Shape Keys" von dem "Object Data properties" zu tun hat:

Blender - Warum glitchen die poligone rum?
Blender, 3D-Modelle, Blender 3d, mmd, 3d model, blender-game-engine, Unity, Blender 2.8, vrchat
1 Antwort
Warum funktioniert der Collider nicht?

Nachdem mein vollständiges Projekt, und damit 2 Wochen Arbeit, verloren gegangen sind, sitze ich nun daran es zu rekonstruieren. Dabei bin ich aber auf einen Fehler gestoßen, welchen ich vorher nicht hatte. Was ich damit meine, ich habe schon damals ein Tutorial genutzt, welches erklärt, wie man einen Enemy dazu bringt dich zu töten. Das Problem nun ist, ich benutze genau das Selbe Script wie schon damls, wo es funktioniert hat, doch urplötzlicherscheinen die beiden UI Elemente welche den Tod symbolisieren nicht mehr. Deshalb bin ich nun hier und wollte fragen, ob sich vielleicht jemand die Zeit nehmen könnte mir zu helfen, dankeschön : ).

Dies sind die Ausschnitte aus dem Code um die es geht und die wichtig sind(mein Code war zu lang und ich durfte ihn nicht ganz anhängen : (

using System.Diagnostics;

using UnityEngine;

using UnityEngine.UI;

public class PlayerMovement : MonoBehaviour {

[SerializeField] private LayerMask platformsLayerMask;

private Rigidbody2D rigidbody2d;

private BoxCollider2D boxCollider2d;

public Animator animator;

float horizontalMove = 40f;

public float runSpeed = 40f;

public float moveSpeed;

public float jumpVelocity;

private float jumpTimeCounter;

public float jumpTime;

private bool isJumping;

public Button RestartButton;

public GameObject gameOverText;

public GameObject player;

public void Start()

{

gameOverText.SetActive (false);

RestartButton.SetActive (false);

}

public void OnCollisionEnter2D (Collider2D col)

{

if (col.gameObject.tag.Equals("Enemy"))

{

gameOverText.SetActive (true);

RestartButton.SetActive (true);

player.SetActive (false);

}

}

}

Danke für die Hilfe : )

Programmieren, Unity
1 Antwort
Unity / NavMesh Fehlermeldung: " GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh."?

Wenn ich mein Unity-Projekt starte, dann kommt in der Konsole eine Fehlermeldung auf:

" GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.
UnityEngine.AI.NavMeshAgent:get_remainingDistance()
Patroli:Update() (at Assets/Patroli.cs:47)

Ich benutze dies für meinen Feind, der sich an die verschieden Punkte bewegen soll und habe auch einen NavMesh an ihn gesetzt.

Hier das Skript von der offiziellen Seite:

// Patrol.cs
using UnityEngine;
using UnityEngine.AI;
using System.Collections;

public class Patroli : MonoBehaviour
{
  public Transform[] points;

  private int destPoint = 0;

  private NavMeshAgent agent;

  void Start()
  {
    agent = GetComponent<NavMeshAgent>();

    // Disabling auto-braking allows for continuous movement
    // between points (ie, the agent doesn't slow down as it
    // approaches a destination point).
    agent.autoBraking = false;

    GotoNextPoint();
  }

  void GotoNextPoint()
  {
    // Returns if no points have been set up
    if (points.Length == 0)
      return;

    // Set the agent to go to the currently selected destination.
    agent.destination = points[destPoint].position;

    // Choose the next point in the array as the destination,
    // cycling to the start if necessary.
    destPoint = (destPoint + 1) % points.Length;
  }

  void Update()
  {
    // Choose the next destination point when the agent gets
    // close to the current one.
    if (!agent.pathPending && agent.remainingDistance < 0.5f)
      GotoNextPoint();
  }
}

Ich hoffe, ihr könnt mir weiterhelfen. 😀

3D, Programmieren, Gaming, development, Unity 3D, Unity
0 Antworten
Unity NavMesh Fehlermeldung?

Wenn ich mein Unity Projekt starte dann kommt in der Konsole eine Fehlermeldung auf folgende: " GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.

UnityEngine.AI.NavMeshAgent:get_remainingDistance()

Patroli:Update() (at Assets/Patroli.cs:47)

Ich benutze dies führ meinen Enemy der sich an die verschieden Punkte bewegen soll und habe auch einen NavMesh an ihn gesetzt hier das Script von der offizielen Seite:

// Patrol.cs

using UnityEngine;

using UnityEngine.AI;

using System.Collections;

public class Patroli : MonoBehaviour

{

  public Transform[] points;

  private int destPoint = 0;

  private NavMeshAgent agent;

  void Start()

  {

    agent = GetComponent<NavMeshAgent>();

    // Disabling auto-braking allows for continuous movement

    // between points (ie, the agent doesn't slow down as it

    // approaches a destination point).

    agent.autoBraking = false;

    GotoNextPoint();

  }

  void GotoNextPoint()

  {

    // Returns if no points have been set up

    if (points.Length == 0)

      return;

    // Set the agent to go to the currently selected destination.

    agent.destination = points[destPoint].position;

    // Choose the next point in the array as the destination,

    // cycling to the start if necessary.

    destPoint = (destPoint + 1) % points.Length;

  }

  void Update()

  {

    // Choose the next destination point when the agent gets

    // close to the current one.

    if (!agent.pathPending && agent.remainingDistance < 0.5f)

      GotoNextPoint();

     

  }

   

}

Ich hoffe ihr könnt mir weiterhelfen :)

3D, Programmieren, Gaming, development, Unity 3D, zocken, Unity
0 Antworten
Unity: Wie ändere ich mein C#-Skript, damit es funktioniert?

Hallo,

um mich einmal kurz vorzustellen (ich habe zwar bereits eins bis zwei Fragen gestellt, aber mich nie vorgestellt, was ich unhöflich fand, deshalb erst hier 😃): Ich heiße Patrick, bin 14 Jahre alt und habe vor rund 4 Wochen mit dem Programmieren angefangen, woraufhin ich auch meine erste Frage hier stellte.😃

Auf jeden Fall: Ähmm ja, das bin ich. :6

Nun zu meiner Frage:

Ich habe im Zuge des Programmierens meines ersten Projektes ein Video gesehen, welches mir sehr gut erklärt, wie ein Score bei Erhöhen der x-Achse steigt.

Doch ich habe ein kleines Problem mit dem Video, denn es ist veraltet, weshalb der Code nicht mehr funktioniert. Trotzdem: Ich sitze schon seit vier Tagen an dem Score und habe bisher noch nichts, da es sehr wenige Videos gibt, welche detailliert das Erstellen eines Score (increasing by meters) erklärt.

Deshalb habe ich mir gedacht: Warum nicht professionelle Hilfe holen und bin mal wieder, wie schon oft zuvor, hier gelandet. Deshalb nun die Bitte:

Könnte sich vielleicht jemand meine Code ansehen, um mir vielleicht zu erklären / zu zeigen, wie ich ihn up-to-date bringe? Ich habe schon relativ viel aktualisiert, GUI zu UI verändert und so, aber es funktioniert immer noch nicht.

Ich würde mich über die Hilfe super freuen. Dankeschön. 😃

Hier also mein Code und btw. Danke, dass Sie / du schon bis hier gelesen haben / hast. 😀

Also der Code:

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

public class Meter : MonoBehaviour
{
  UI.Text uitexty;

  public GameObject player;

  float beginPos;

  float curPos;

  public int multiplier = 10;

  void Start()
  {
    beginPos = player.transform.position.x;
    uitexty = GetComponent<UI.Text>();
  }

  void Update()
  {
    curPos = player.transform.position.x - beginPos;
    int distance = Mathf.Abs(Mathf.RoundToInt (curPos * multiplier));

    if (distance > PlayerPrefs.GetInt("Best"))
      PlayerPrefs.SetInt("Best", distance);

    uitexty.text = "Distance: " + distance + "m /" + PlayerPrefs.GetInt("Best") + "m";
  }
}
Computer, Programmieren, Unity
2 Antworten
Unity 2D Error Bei Player Movement?

Hey leute, ich erstelle gerade ein kleinen 2D handygame in Unity aber habe ein problem mit dem Player/character Movement. ich Bekomme immer den folgenden error: NullReferenceException: Object reference not set to an instance of an .objectTouch_Controller.Update () (at Assets/Scripts/Touch_Controller.cs:26)

Hier der Code:

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;

public class Touch_Controller : MonoBehaviour
{
  public Transform player;
  public float speed = 5;
  private bool TouchStart = false;
  private Vector2 pointA;
  private Vector2 pointB;


  // Start is called before the first frame update
  void Start()
  {
     
  }

  // Update is called once per frame
  void Update()
  {
    if(Input.GetMouseButtonDown(0))
    {
      pointA = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
    }

    if(Input.GetMouseButtonDown(0))
    {
      TouchStart = true;

      pointB = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
    }
    else
    {
      TouchStart = false;
    }
     
  }
   
  private void FixedUpdate()
  {
    if(TouchStart)
    {
     Vector2 offset = pointB - pointA;
     Vector2 direction = Vector2.ClampMagnitude(offset, 1.0f);
     moveCharacter(direction * -1);
    }
  }
   
  void moveCharacter(Vector2 direction)
  {
    player.Translate(direction * speed * Time.time);
  }
}

Was mache ich Falsch und wie kann ich das korrigieren. Ich finde einfach keinen Fehler in Z.26. Danke schon mal im voraus.

Programmieren, C Sharp, Unity
1 Antwort
Wo liegt der Fehler (Unity)?

Ich habe in Unity angefangen, einen Endless Runner zu programmieren (es ist mein erstes Spiel) und habe ein Skript geschrieben, welches ich meinem Sprite in Unity angefügt habe.

Hier der Code:

using System.Collections;

using System.Collections.Generic;

using System.Diagnostics.Eventing.Reader;

using System.Runtime.InteropServices;

using System.Security.Cryptography;

using System.Threading;

using UnityEngine;

public class SpielerController : MonoBehaviour

{

  private Rigidbody2D rb;

  public float sprungkraft = 10;

  // Start is called before the first frame update

  void Start()

  {

    rb = GetComponent<Rigidbody2D>();

  }

  // Update is called once per frame

  void Update()

  {

    transform.Rotate(0, 0, -100 * Time.deltaTime);

    if(Input.GetKeyDown(KeyCode.Space))

    {

      float y = transform.position.y;

      StartCoroutine(jump(y));

    }

    private IEnumerator jump(float y) 

    {

      yield return new WaitForSeconds(0.01f);

      if(transform.position.y < 0)

      {

        //NOTHING

      }

      else

      {

        y = y + sprungkraft;

        transform.position = new Vector2(transform.position.x, y);

        StartCoroutine(jump(y));

      }

         

    }

      }

       

  }

}

Jetzt hab ich ein fehler:

Wo liegt der Fehler (Unity)?
Computer, Technik, Programm, Programmieren, Unity, unity3d, unity 2d, Spiele und Gaming
2 Antworten
Wo liegt der Fehler (Unity)?

Ich habe in Unity angefangen, einen Endless Runner zu programmieren (es ist mein erstes Spiel) und habe ein Skript geschrieben, welches ich meinem Sprite in Unity angefügt habe.

Hier der Code:

using System.Collections;

using System.Collections.Generic;

using System.Diagnostics.Eventing.Reader;

using System.Runtime.InteropServices;

using System.Security.Cryptography;

using System.Threading;

using UnityEngine;

public class SpielerController : MonoBehaviour

{

  private Rigidbody2D rb;

  public float sprungkraft = 10;

  // Start is called before the first frame update

  void Start()

  {

    rb = GetComponent<Rigidbody2D>();

  }

  // Update is called once per frame

  void Update()

  {

    transform.Rotate(0, 0, -100 * Time.deltaTime);

    if(Input.GetKeyDown(KeyCode.Space))

    {

      float y = transform.position.y;

      StartCoroutine(jump(y));

    }

    privat IEnumerator jump(y) {

      yield return new WaitForSeconds(0.01f);

      if(transform.position.y < 0)

      {

        //NOTHING

      }

      else

      {

        y = y + sprungkraft;

        transform.position = new Vector2(transform.position.x, y);

        StartCoroutine(jump(y));

      }

         

    }

      }

       

  }

}

Jetzt hab ich diese Fehler

Wo liegt der Fehler (Unity)?
Computer, Computerspiele, Technik, Programm, Programmieren, Unity, unity 2d, Spiele und Gaming
1 Antwort

Meistgelesene Fragen zum Thema Unity