【问题标题】:How do I have random spawns occur every so many seconds?我如何让随机生成每隔这么多秒发生一次?
【发布时间】:2021-01-06 02:25:08
【问题描述】:

这是我的代码,我很新,不知道我需要更改什么。我试图每隔一段时间生成一把刀,这样我的玩家就可以捡起它们,并能够在捡起一把刀后互相刺伤 3 秒。我可以让刀子生成,但我可以让刀子生成多次,而且我绝对无法控制刀子生成的频率。如果有人可以查看我的代码并弄清楚我需要什么加我会很感激。

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

public class KnifeSpawns : MonoBehaviour
{
    public GameObject Knifeprefab;
public Vector3 center;
public Vector3 size;


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

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

public void SpawnKnife()
{

    Vector3 pos = center + new Vector3(Random.Range(-size.x/2, size.x/2),Random.Range(-size.z / 2, 
size.z / 2),Random.Range(-size.y/1,size.y/1));

    Instantiate(Knifeprefab, pos, Quaternion.identity);

}

void OnDrawGizmosSelected()
{
    Gizmos.color = new Color(1, 0, 0, 0.5f);
    Gizmos.DrawCube(center, size);
}

}

【问题讨论】:

  • 此问题与 Visual Studio 应用程序无关,因此我已为您删除了该标签。请务必在使用标签之前阅读标签说明,以免无意中滥用它们(或更糟糕的是:提供有关您的问题的误导性信息)。
  • 查看您的代码,您只是在Start() 方法中产生了一把刀,这意味着SpawnKnife() 只会被调用一次。您需要使用Update() 制定某种计时机制,以便在设定的间隔内生成刀具。

标签: c# unity3d random timer


【解决方案1】:

使用协程来做到这一点。声明一个变量来保存时间间隔,一个变量来保存生成的刀数,以及一个变量来保存要生成的刀数。然后在 Coroutine 内部使用 while 循环来控制生成的限制。

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

public class KnifeSpawns : MonoBehaviour
{
    public GameObject Knifeprefab;
    public Vector3 center;
    public Vector3 size;
    int spawnCount; // how many knives is spawned
    float timeInterval; // to spawn knife every 3 seconds
    int limit; // how many knives to spawn

    // Start is called before the first frame update
    void Start()
    {
        spawnCount = 0;
        limit = 10;
        timeInterval = 3f;
        StartCoroutine("SpawnKnife");
    }

    public IEnumerator SpawnKnife()
    {
        while (spawnCount <= limit)
        {
            Vector3 pos = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), Random.Range(-size.z / 2, size.z / 2), Random.Range(-size.y / 1, size.y / 1));

            Instantiate(Knifeprefab, pos, Quaternion.identity);
            spawnCount += 1;
            yield return new WaitForSeconds(timeInterval);
        }
    }

    void OnDrawGizmosSelected()
    {
        Gizmos.color = new Color(1, 0, 0, 0.5f);
        Gizmos.DrawCube(center, size);
    }

}

【讨论】:

  • 也可以直接把Start做成协程
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多