Jump to content
Unity Insider Forum
Sign in to follow this  
Tim96

Touch Berührung

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.

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

ich müsste das Problem spätestens heute Abend gelöst haben, weil ich mit dem ganzen schon unter Zeitdruck stehe leider.

Würde mich über eine Antwort freuen

Share this post


Link to post
Share on other sites
vor 2 Stunden schrieb Tim96:

nein, ich glaube du weißt nicht was ich meine.

Na, dann erklär doch nochmal. Ich bin halt nicht in deinem Kopf drin.

Share this post


Link to post
Share on other sites

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🙏

 

 

Share this post


Link to post
Share on other sites

Langsam wird's ein bisschen lästig. Du kannst halt gerne immer wieder beschreiben, was du tun willst, aber du hast halt immer noch nicht beschrieben, woran es hakt. Und genau danach hat @Kojote gefragt.

Share this post


Link to post
Share on other sites

Habe das ein bisschen undeutlich ausgedrückt.

Mit Problem meinte ich, dass ich das beschriebene nicht umsetzen kann

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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.

 

 

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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);

     }
}
    


    


 

Share this post


Link to post
Share on other sites
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.

  • Like 1

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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;

 

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...