Unity - 无限精灵spawner停止高速生成

时间:2015-01-29 18:21:16

标签: unity3d 2d sprite

我为我的2D汽车游戏编写了一个无限轨道的脚本。所以我得到了一个杀手"在我的车后面,它摧毁了左边和右边屏幕上出现的所有地面物体,我有一个产卵器,它产生了我所有的块状精灵,它的效果非常好。 这是我的更新功能:

void Update()
{
    if(Mathf.Round(this.transform.position.x) == limit)
    {
        //Debug.Log("Limit reached");
        limit += 10;
        Spawn();
    }
}

我将脚本附加到我的相机,并且我将启动限制设置为160(因为我已经有15个10x10精灵作为开始)。每当我的生成器通过x轴限制时,它会在此位置产生一个新的精灵,并将下一个限制设置为10。如果我不开得太快,这种方法很有效。因为它停止了产卵,世界被切断了。当我开车返回以使我的产卵者回到已经产生的区域并再次缓慢地开始它时,它再次起作用。我相信这种方法只是为了产生足够快的效率,所以我可能需要另一种方式来做它。

为了理解这里的其余部分:

using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour
{
    public GameObject[] obj;
    private int limit = 160;
    public int yAxisValue = -1;
    public bool isOnlyDirt;
    private ArrayList rotationValues = new ArrayList();


void Start()
{
    //Spawn ();
    int value = 0;
    for(int i = 0; i < 4; i++)
    {
        rotationValues.Add(value);
        //Debug.Log(rotationValues[i]);
        value += 90;
    }
}

void Spawn()
{
    Vector3 pos = new Vector3 (Mathf.Round(transform.position.x), yAxisValue, transform.position.z);

    Quaternion rotation = new Quaternion (0, 0, 0, 0);
    if(isOnlyDirt)
    {
        int zRot = (int)rotationValues[Random.Range(0, rotationValues.Count - 1)];
        //Debug.Log(zRot);
        rotation = new Quaternion(0, 0, zRot, 0);
    }

    var SpawnedGround = Instantiate(obj[Random.Range(0, obj.GetLength(0))], pos, rotation);

    (SpawnedGround as GameObject).gameObject.tag = "Gro

我还有一个单行班车可以将我的生产者放在我的车前,这样就可以产生一些东西:

public float yCoord;


void Start ()
{
    this.transform.position = new Vector3 (transform.position.x + 160, -yCoord, transform.position.z);
}

我是它的父母,所以我只需要在启动功能中编写它。

有什么改进这个的想法吗? 谢谢

1 个答案:

答案 0 :(得分:1)

抱歉无法发表评论。你应该试试

if(Mathf.Round(this.transform.position.x) >= limit)

而不是

if(Mathf.Round(this.transform.position.x) == limit)

我认为浮点精度正在跳过检查。