Как сделать обратный отсчет, пока рыба не кусается в рыболовной игре Unity C # - PullRequest
0 голосов
/ 05 июля 2018

Я делаю игру о рыбалке, в которой вы забрасываете свою линию, и она либо навсегда останавливает единство, либо мгновенно ловит рыбу, может кто-нибудь помочь исправить это. Я пытаюсь сделать это так, когда timerToBite больше или равно timerBeforeBite, это позволит вам нажать кнопку, которая охватывает весь экран, чтобы поймать рыбу. Вот мой код:

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

public class FishingManager : MonoBehaviour
{
    public Rigidbody Floater;
    public Transform poleEnd;
    public Button CastButton;
    bool Casted = false;
    bool isFishing = false;
    bool fishOnLine = false;
    float timerToBite;
    float timeBeforeBite;
    float timeFloat;

    // Use this for initialization
    void Start() { }

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

    public void Cast()
    {
        Casted = !Casted;
        Debug.Log("Casted = " + Casted);
        if (Casted == true)
        {
            Rigidbody clone;
            clone = Instantiate(Floater, poleEnd.position, poleEnd.rotation) as Rigidbody;
            isFishing = true;
            Fish();
        }
        else
        {
            if (fishOnLine == false)
            {
                Destroy(GameObject.FindWithTag("Floater"));
                isFishing = false;
            }
            else
            {
                Destroy(GameObject.FindWithTag("Floater"));
                CatchFish();
                fishOnLine = false;
            }
        }
    }

    void CatchFish()
    {
        Debug.Log("You Caught A Fish");
    }

    void Fish()
    {
        timeBeforeBite = UnityEngine.Random.Range(50f, 100f);
        timerToBite += Time.deltaTime;
        while (isFishing == true)
        {
            if (timerToBite >= timeBeforeBite)
            {
                Debug.Log("Reel Now!");
                fishOnLine = true;
                isFishing = false;
                timerToBite = 0f;
            }
        }
    }
}

Я много чего перепробовал, но ничего не работает. Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 05 июля 2018

Замерзает, потому что вы застряли в цикле while. Вместо этого вы должны использовать сопрограмму.

if (Casted == true)
{
    Rigidbody clone;
    clone = Instantiate(Floater, poleEnd.position, poleEnd.rotation) as Rigidbody;

    isFishing = true;
    StartCoroutine(Fish()); // start coroutine here
}
IEnumerator Fish()
{
    timeBeforeBite = UnityEngine.Random.Range(50f, 100f);

    while (isFishing == true)
    {
        if (timerToBite >= timeBeforeBite)
        {
            Debug.Log("Reel Now!");
            fishOnLine = true;
            isFishing = false;
            timerToBite = 0f;
        }
        timerToBite += Time.deltaTime;
        yield return null; // return within the while-loop
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...