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