C# 如果游戏对象在同一条线上,如何移除它们?

C# 如果游戏对象在同一条线上,如何移除它们?,c#,unity3d,C#,Unity3d,我正在做一个像两辆车一样的游戏。我已经编写了创建实例化器的代码。这是一场赛车比赛,共有4条车道。让我给你看一张我比赛的照片,是的,这只是为了练习 玩家应该避开方形物体,吃圆形物体,但有时两个方形物体会在同一条车道上繁殖,玩家不可能获胜。我写了这个脚本来控制它,但我失败了。请帮帮我。至少检查一下我的DetectAssembleFunction()。告诉我我做错了什么 using System.Collections; using System.Collections.Generic; using

我正在做一个像两辆车一样的游戏。我已经编写了创建实例化器的代码。这是一场赛车比赛,共有4条车道。让我给你看一张我比赛的照片,是的,这只是为了练习

玩家应该避开方形物体,吃圆形物体,但有时两个方形物体会在同一条车道上繁殖,玩家不可能获胜。我写了这个脚本来控制它,但我失败了。请帮帮我。至少检查一下我的DetectAssembleFunction()。告诉我我做错了什么

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

public class Spawner : MonoBehaviour {

    public GameObject[] objects;
    public float delaytime = 2f; // this is separate for each prefab with which script is attaches 
    public float spawnrate = 1f; // this is separate for each prefab with which script is attaches 

    public static int lastgameobjectindex;
    public static GameObject lastgameobject;
    public static GameObject SecondLastGameObject;
    private float loadingtime;
    private GameObject go; // just a temporary variable

    public static List<GameObject> spawnobjects = new List<GameObject>();
    // Use this for initialization
    void Start () {
        loadingtime = delaytime;
    }

    // Update is called once per frame
    void Update () {
        if (Time.time > loadingtime)
        {
            float randomness = spawnrate * Time.deltaTime;
            if ( randomness < Random.value)
            {
                Spawners();
            }
            NextLoadTime();
        }
    }

   private  void Spawners()
    {
        int spawnnumber = Random.Range(0, 2);
        GameObject go = Instantiate(objects[spawnnumber]) as GameObject;
        go.transform.position = this.transform.position;
        spawnobjects.Add(go);
        Debug.Log(spawnobjects[spawnobjects.Count-1]);
        DetectSameLaneObjects();
      /*  if (spawnobjects.Count > 4)
        {
            spawnobjects.RemoveAt(0);
        }*/
    }

    private void  DetectSameLaneObjects()
    {
        if (spawnobjects.Count > 3)
        {
           lastgameobject = spawnobjects[spawnobjects.Count - 1];
            SecondLastGameObject = spawnobjects[spawnobjects.Count - 2];
             lastgameobjectindex = spawnobjects.Count - 1;
            if (SecondLastGameObject.transform.position.x != lastgameobject.transform.position.x
                )
            {
                if (Mathf.Abs(lastgameobject.transform.position.x- SecondLastGameObject.transform.position.x) < 2.3f)
                {

                    Debug.Log("Destroy function getting called");
                     Destroy(spawnobjects[lastgameobjectindex]);
                    spawnobjects.RemoveAt(lastgameobjectindex);

                }
            }
        }
    }
    void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(this.transform.position, 0.6f);
    }

    void NextLoadTime()
    {
        loadingtime = Time.time + delaytime;
    }

}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类产卵器:单行为{
公共游戏对象[]对象;
public float delaytime=2f;//对于脚本所附加的每个预置,这是单独的
public float spawnerate=1f;//对于脚本所附加的每个预置,这是单独的
公共静态int lastgameobjectindex;
公共静态游戏对象lastgameobject;
公共静态游戏对象SecondLastGameObject;
私有浮动加载时间;
private GameObject go;//只是一个临时变量
公共静态列表对象=新列表();
//用于初始化
无效开始(){
加载时间=延迟时间;
}
//每帧调用一次更新
无效更新(){
如果(Time.Time>loadingtime)
{
浮动随机性=繁殖率*时间.deltaTime;
if(随机性<随机值)
{
产卵者();
}
NextLoadTime();
}
}
私有空产卵器()
{
int spawnnumber=Random.Range(0,2);
GameObject go=实例化(对象[spawnnumber])为GameObject;
go.transform.position=this.transform.position;
生成对象。添加(转到);
Log(spawnobjects[spawnobjects.Count-1]);
DetectAssembleObjects();
/*如果(spawnobjects.Count>4)
{
spawnobjects.RemoveAt(0);
}*/
}
私有void detectsamaneobjects()
{
如果(spawnobjects.Count>3)
{
lastgameobject=spawnobjects[spawnobjects.Count-1];
SecondLastGameObject=spawnobjects[spawnobjects.Count-2];
lastgameobjectindex=spawnobjects.Count-1;
if(SecondLastGameObject.transform.position.x!=lastgameobject.transform.position.x
)
{
if(Mathf.Abs(lastgameobject.transform.position.x-SecondLastGameObject.transform.position.x)<2.3f)
{
Log(“调用销毁函数”);
销毁(生成对象[lastgameobjectindex]);
spawnobjects.RemoveAt(lastgameobjectindex);
}
}
}
}
void OnDrawGizmos()
{
Gizmos.DrawWireSphere(this.transform.position,0.6f);
}
void NextLoadTime()
{
loadingtime=Time.Time+delaytime;
}
}

每行最多生成一个项目?大概玩家不能同时收集两个回合的物体了吧?@James delayrate和spawnrate对于每个游戏物体都是不同的。但它仍然没有给出解决方案。你能为我的剧本或新剧本提供一些修改吗script@James这就是我想要修复在一个平面中出现两次的对象的原因。为什么不简单地检查一个立方体旁边的线,如果有一个立方体,就不要添加另一个立方体?将问题从“如果在同一高度有两个元素,则删除一个元素”简化为“每个高度仅添加一个立方体最大值”可能不会生成两个独立的随机数<代码>执行{a=rand();b=rand();}while(a==0&&b==0)