Jump to content
Unity Insider Forum

Touch Berührung


Tim96

Recommended Posts

Weiß echt nicht genau, woran es da hapert. Du hast die OnMouseDown-Methode, in die du alles mögliche reinschreiben kannst, was passieren soll, wenn ein Collider berührt wird. Da kannst du dann entweder Dinge im gleichen Script ändern oder z.B. eine Methode bei einem anderen Objekt aufrufen, wie oben beschrieben. Ob über diese Extra-Ecke oder nicht, am Ende setzt du dann den Wert irgendeiner Variable; "myTimer" klingt da ganz vielversprechend.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 58
  • Created
  • Letzte Antwort

Also ich hab jz wirklich seit 3 Stunden alles in meiner Kraft liegende ausprobiert, aber ich verzweifel daran.

Ich will einfach nur, dass wenn man den vom Circle Collider markierten Bereich berührt, dass dann der Timer neu resetet wird.

Wirklich, ich kriege das Problem nicht gelöst

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo.

Also, ich hab, wie du weißt, mit dem Circle Collider einen Bereich markiert. Und wenn man diesen drückt dann „spinnt“ sich der Pfeil

(ich habe noch Score eingebaut und dass der Pfeil eine höhere Beschleunigung bekommt pro klick und beim speed 20 stoppt)

 

Und jetzt will ich es halt so schaffen, dass ich einen Counter habe im Game, der 1sek läuft und dann bei 0 endet. Aber der Counter soll resetet werden, wenn man halt die markierte Fläche vom Circle Collider drückt.

 

Ich habe zwar schon einen Counter bauen können, aber diese Funktion, dass die Zeit resetet wird beim drücken in die Fläche, habe ich noch nicht hinbekommen.

 

Wäre dir sehr sehr dankbar, wenn du das Problem lösen könntest🙏

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist uns schon klar... aber wieso nicht?

Du kannst ja auch sagen "ich kriege den Tisch nicht zusammengebaut." Aber liegt das daran, dass du den Hammer nicht richtig geschwungen kriegst? Dass du die Nägel nicht findest? Oder weißt du nicht genau, wie der Tisch am Ende aussehen soll?

Es ist eine sehr wichtige Fähigkeit, herausfinden zu können, was genau schief läuft und woran es hakt. Du hast hier eine ganz simple Aufgabe vor dir: Spieler drückt auf Collider, Timer wird zurückgesetzt. Wir sagen das halt nicht, um dich zu ärgern... wir wissen halt wirklich nicht, woran es scheitert. Du weißt spätestens aus diesem Thread, wie man auf Klicks reagiert, wie man Methoden einer anderen Komponente aufruft, und dein Timer ist eine float-Variable, die hochgezählt wird, und die du durch Setzen auf 0 wieder zurücksetzen kannst. Welcher Teil davon ist also gerade problematisch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, also ich sage erstmal was ich schon habe.

Das Script habe ich auf "Text" drauf gepackt. Das Script sagt halt, dass wenn man das Programm startet, dass das dann von 3 runtergezählt wird und bei 0 stoppt.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Zeitcount : MonoBehaviour
{
    public double myTimer = 3;
    private Text timerText;
    private bool timerIsActive = true;

    // Start is called before the first frame update
    void Start()
    {
        timerText = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
    


            if (timerIsActive)
            {
                myTimer -= Time.deltaTime;
                timerText.text = myTimer.ToString();
                print(myTimer);
                if (myTimer <= 0)
                {
                    myTimer = 0;
                    timerIsActive = false;
                }
            }
        }
    }

 

Und damit du jetzt verstehst was ich nicht hin bekomme. 

Es hakt ganz einfach daran, dass ich nicht begreife, wie man programmieren kann, dass die Zeit beim klick auf den Circle Collider wieder resetet wird.

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast wirklich alle Bauteile dafür gekriegt. Dein GameObject mit Collider kriegt ein Script mit OnMouseDown und einem Feld wo du dein Timer-Script reinziehen kannst:

public Zeitcount timer;

private void OnMouseDown()
{
  timer.ResetTimer();
}

Und dein Timer-Objekt kriegt diese ResetTimer-Methode, in der deine Timer-Variable zurückgesetzt wird:

public void ResetTimer()
{
  myTimer = keineAhnung;
}

Was für einen Wert du da hintust, ist dir überlassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, 

ich hoffe ich bin nicht allzu nervig. Ich bräuchte eine Lösung, dass wenn man die restliche Fläche anklickt (sprich die Fläche, die nicht mit dem Circle Collider markiert ist), dass das Spiel stoppt, also die Zeit und der Score angehalten wird. (Den Score-Script schicke ich als neue Nachricht).

Außerdem soll bei nächsten Klick auf den Circle Collider das Spiel praktisch neu gestartet werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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


public class ArrowRotation : MonoBehaviour
{

    public static float timer = 0;
    private Text timescore;

    private float currentAngle = 0f;
    private Quaternion targetRotation;
    public float speed = 0f;

    public void Spin()
    {
        timescore = GetComponent<Text>();
        ScoreBoard.scoreValue += 2;

        
        var z = Random.Range(0f, 360f);
        targetRotation = Quaternion.Euler(0, 0, z);
        currentAngle += Random.Range(110, 250f);
        currentAngle = Mathf.Repeat(currentAngle, 360f);
        speed = speed + 0.35f;
        if (speed >= 5)
        {
            speed = speed + 0.25f;
            //Effekt einfügen später z.B. Ton effekt und animierter Effekt

            if (speed >= 22)
            {
                speed = 22;
            }
           
        }
      
}
    

    private void Update()
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
        targetRotation = Quaternion.Euler(0, 0, currentAngle);

     }
}
    


    


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Tim96:

ich hoffe ich bin nicht allzu nervig.

Kannst ja mal deinen Code als solchen einfügen, mit dem <>-Knopf über der Textbox ;)

vor 1 Stunde schrieb Tim96:

Ich bräuchte eine Lösung, dass wenn man die restliche Fläche anklickt

Kannst ja ganz stumpf einen dicken fetten Collider hinter den Kreis packen, der den ganzen Bildschirm ausfüllt.

vor 1 Stunde schrieb Tim96:

(Den Score-Script schicke ich als neue Nachricht).

Kannst auch gerne alles in einen Beitrag machen...

vor 1 Stunde schrieb Tim96:

dass das Spiel stoppt, also die Zeit und der Score angehalten wird.

Bauste eine bool-Variable dahon, setzt die auf true wenn das Spiel läuft, sonst auf false. Dein Timer läuft nur, wenn die Variable auf true gesetzt ist. Du kannst auch die Zeit komplett anhalten, mit Time.timeScale. Ist allerdings die weniger schöne Lösung, da sie, wenn du noch einmal etwas bauen willst, sofort Probleme verursacht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Stunden schrieb Sascha:

Kannst ja ganz stumpf einen dicken fetten Collider hinter den Kreis packen, der den ganzen Bildschirm ausfüllt.

Den Gedanken hatte ich halt auch schon, allerdings war das dann so, dass der andere Collider keine Wirkung mehr hatte

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Stunden schrieb Sascha:
vor 17 Stunden schrieb Tim96:

 

Bauste eine bool-Variable dahon, setzt die auf true wenn das Spiel läuft, sonst auf false. Dein Timer läuft nur, wenn die Variable auf true gesetzt ist. Du kannst auch die Zeit komplett anhalten, mit Time.timeScale. Ist allerdings die weniger schöne Lösung, da sie, wenn du noch einmal etwas bauen willst, sofort Probleme verursacht.

aller klar ich probiere es aus, danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 6.3.2020 um 14:46 schrieb Tim96:

ok, bin nicht schlau genug, dass umzusetzen.

Das ist Quatsch, du musst dich nur hinsetzen und dich da reinfuchsen. Das ist am Anfang nicht wirklich leicht, aber  früher oder später muss das halt gehen. Bin jetzt nicht so dafür zu haben, dass ich das Script einmal runtertippe... ich merke aber auch gerade, dass du das Script einfach deaktivieren kannst, da es ja nur die Drehung macht. Das machst du mit enabled:

timer.enabled = false;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe jetzt das Programm noch gut weiter geschafft, aber eine Sache stört mich noch und zwar, dass der Pfeil sich sehr oft immer erst in die Rechte und dann in die Linke, dann wieder in die Rechte und so weiter... Richtung dreht dreht. Oder, dass der Pfeil bis zu 6 mal hintereinander nur in die rechte Richtung schwingt. Das selbe gilt auch noch für die Linke Seite.

Das finde ich auf dauer aber etwas nervig, deshalb würde ich es gerne so haben, dass der Pfeil höchstens 3 mal hintereinander nur nach rechts schwingen kann, höchstens 3 mal hintereinander nur nach Links schwingen kann und höchstens 4 mal hintereinander abwechselnd von links nach rechts bzw. von rechts nach links schwingt.

Könntest du mir dabei helfen? Danke im voraus.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

Ankündigungen


Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Neu erstellen...