【发布时间】:2019-10-07 08:19:58
【问题描述】:
我的概念很简单:我正在生成对象。我有三个浮点数:RunEvery、BetweenThis 和 AndThis。我可以得到一个值作为回报,但我无法更改这个值。我每次都想要一个新的随机数,但我总是得到相同的初始值。
RunEvery = Random.Range(BetweenThis, AndThis);
假设BetweenThis 等于1,AndThis 等于20。RunEvery 然后变成1 到20 之间的任意数字。所以如果选择的数字是10,脚本将每10 秒生成一次该对象。
我不是在寻找“10、10、10、10、10...等”。
我需要“10、7、5.5、18、9...等”
public UnityEvent OnTimerEnd;
void OnEnable()
{
SetRandomizer();
if (RunOnAwake){
Invoke("Execute", 0);
}
if (Loop){
//SetRandomizer();
InvokeRepeating("Execute", RunEvery, RunEvery);
}
else{
Invoke("Execute", RunEvery);
}
}
public void SetRandomizer(){
RunEvery = Random.Range(BetweenThis, AndThis);
Debug.Log("The Random Range is " + RunEvery);
}
public void Execute(){
OnTimerEnd.Invoke();
//SetRandomizer();
}
我希望它继续选择随机数,但我只能让脚本每次都重复初始值。
我尝试创建包含 Random.Range 内容的新函数,但由于某种原因,它甚至只会使用第一个生成的值。
我尝试过移动部分代码,创建一个 IEnumerator 并等待,我什至尝试打开和关闭整个脚本。我尝试了很多其他的东西,但我不会让你厌烦。
我确信这很容易解决,但这不是我自己能解决的问题。我浏览了 Scripting API 和手册以及我的 C# 书籍,但他们只谈论过使用 Random.Range 一次,而不是重复使用。
【问题讨论】:
-
所以为了清楚起见,假设说你得到的第一个值,即 RunEvery 说 10 秒后 10 秒你想产生对象,那时你还想给 RunEvery 分配新值正确吗?
-
@PraveenPanishetti,是的。例如,假设我们有一滴水从叶子上掉下来。第一个随机数的范围在 1 到 20 秒之间。假设它随机选择数字 5。5 秒后,雨滴会产生并落下。选择 1 到 20 之间的新随机数。假设它随机选择 17 秒。第一次掉落17秒后,第二次掉落。将选择一个新的随机数,并以这种方式继续下降。目前,我只能保留初始计算的使用,即使我重新设置了值。