Как рандомизировать длительность таймера между двумя поплавками - PullRequest
0 голосов
/ 10 июля 2019

В настоящее время этот код порождает мой префаб всего с 1 float или 1 секунда или без. Я хочу создать свой префаб между минимальным и максимальным значениями, но не уверен, что делать, потому что я новичок и все еще изучаю c # и unity.

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

public class Spawn : MonoBehaviour
{

    [SerializeField]
    public GameObject coin;

    [SerializeField]
    float fTimeIntervals;

    [SerializeField]
    Vector2 v2SpawnPosJitter;

    float fTimer = 0;

    public CurrencyManager cm;


    // Start is called before the first frame update
    void Start()
    {
        fTimer = fTimeIntervals;

    }

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

        fTimer -= Time.deltaTime;
        if (fTimer <= 0)
        {
            fTimer = fTimeIntervals;
            Vector2 v2SpawnPos = transform.position;
            v2SpawnPos += Vector2.right * v2SpawnPosJitter.x * (Random.value - 0.5f);
            v2SpawnPos += Vector2.up * v2SpawnPosJitter.y * (Random.value - 0.5f);
            GameObject cmscript = Instantiate(coin, v2SpawnPos, Quaternion.identity, GameObject.FindGameObjectWithTag("Canvas").transform);
            cmscript.GetComponent<AutoDestroy>().CM = cm;
        }
    }


}

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Разделите ваше поле fTimeIntervals на поле fMaxTimeInterval и поле fMinTimeInterval, затем используйте Random.Range при сбросе таймера, чтобы установить его значение между этими интервалами.Вы можете даже сделать ResetTimer метод, чтобы сделать это в Start и Update, поэтому, если вы измените способ, вам нужно изменить его только в одном месте:

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

public class Spawn : MonoBehaviour
{

    [SerializeField]
    public GameObject coin;

    [SerializeField]
    float fMinTimeInterval;

    [SerializeField]
    float fMaxTimeInterval;

    [SerializeField]
    Vector2 v2SpawnPosJitter;

    float fTimer = 0;

    public CurrencyManager cm;


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

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

        fTimer -= Time.deltaTime;
        if (fTimer <= 0)
        {
            ResetTimer();
            Vector2 v2SpawnPos = transform.position;
            v2SpawnPos += Vector2.right * v2SpawnPosJitter.x * (Random.value - 0.5f);
            v2SpawnPos += Vector2.up * v2SpawnPosJitter.y * (Random.value - 0.5f);
            GameObject cmscript = Instantiate(coin, v2SpawnPos, Quaternion.identity, GameObject.FindGameObjectWithTag("Canvas").transform);
            cmscript.GetComponent<AutoDestroy>().CM = cm;
        }
    }

    void ResetTimer()
    {
        fTimer = Random.Range(fMinTimeInterval,fMaxTimeInterval);
    }
}
0 голосов
/ 10 июля 2019

Не очень понял, что вы имели в виду, вы имели в виду таймер?Используйте random.range, если вы хотите случайное число между минимальным / максимальным значением https://docs.unity3d.com/ScriptReference/Random.Range.html

...