【问题标题】:Unity3D: Spawn random objects one after another (2D)Unity3D:一个接一个地生成随机对象(2D)
【发布时间】:2014-12-28 16:06:15
【问题描述】:

我想创建一个由随机生成的对象组成的地形。我创建了几个预制件并制作了一个脚本,将所有 3 个预制件放在一个数组中,并随机生成它们。 我遇到的问题是(不同大小的)对象是在 1 个单位距离内产生的,所以基本上是相互重叠的,而不是一个接一个。 第二个问题是我不确定如何将产卵限制在一个不错的数字。我创建了一个脚本,一旦我通过它们就会破坏它们,但是在代码中,目前它们正在无限地产生,太快了(我知道代码不是最好的,我还在练习)。 我确实寻找了可能的解决方案或类似的问题,但没有找到任何可以帮助我的东西。 这是我脚本中的代码:

using UnityEngine;
using System.Collections;

public class SpawnScript : MonoBehaviour {

public GameObject[] obj;
public Vector3 pos = new Vector3(-8,-4,0);
public float size = 1.0f;
private Vector3 dir = Vector3.right;

void Start () {
    Spawn();
}

void Spawn() {
    for (int i = 0; i<30; i++) 
    {
        Instantiate (obj [Random.Range (0, obj.Length)], pos, Quaternion.identity);
        pos += dir * size;
    }
    Invoke ("Spawn", 2);
}
}

我希望我能得到任何建议、参考或帮助。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    它们在 1 个单位距离处生成,因为您将 size 定义为 1.0f。取对象的实际大小:

    GameObject go = obj[Random.Range(0, obj.Length)];
    Vector3 size = go.renderer.bounds.size;
    pos += new Vector3(dir.x * size.x, dir.y * size.y, dir.z * size.z); 
    Instantiate(go, pos, Quaternion.identity);
    

    见:Find Size of GameObject

    【讨论】:

    • 谢谢,我知道大小定义,但不知道如何获取对象长度。我尝试了类似的方法,但总是收到一个错误,即我没有将渲染器应用于对象。根据您的建议,我收到此错误:error CS0019: Operator '*' cannot be applied to operands of type 'UnityEngine.Vector3' and 'UnityEngine.Vector3'
    • 好吧size 似乎是一个向量。这样的事情有用吗? Vector3 size = go.renderer.bounds.size; pos += new Vector3(dir.x * size.x, dir.y * size.y, dir.z * size.z); 假设 dir 已标准化。
    • 我现在没有收到任何错误,但只生成了一个对象的实例。我会尝试更多地研究它。再次感谢您为我提供线索 编辑:所有对象都生成,但在同一个位置.. 我认为预制件存在问题,并且出于某种原因获取它的大小。
    • 您应该阅读一些基本教程...您需要在 vector3 x 和 y 位置添加一个不断变化的变量,以便您的对象在 dir.x * x * size.x 等处生成。 . 在这种情况下,X 可能是来自 for 循环的变量...
    • 实例化在错误的位置,当然它必须是显示语句的最后一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2023-01-03
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多