我是新来的团结一心的人,我想成为一个无穷无尽的跑步者。我有“路”空的游戏对象,其中的“地面”被创造。地面是游戏对象,它包含一些其他的对象和触发器。地面游戏对象。当player触发"EndTrigger“脚本"GroundGenerator”时,会创建新的基础:
public class GroundGenerator : MonoBehaviour
{
public GameObject GroundPrefab;
private bool isGenerated = false;
private float width;
private Transform parent;
private Transform road;
private void Start()
{
parent = transform.parent;
road = parent.transform.parent;
width = parent.GetComponent<BoxCollider2D>().size.x;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Player") && !isGenerated)
{
AddNewGround();
RemoveUnnecessaryGround();
}
}
private void AddNewGround()
{
Vector3 pos = parent.position;
GameObject newGround = Instantiate(GroundPrefab, pos + new Vector3(width, 0), Quaternion.identity);
newGround.transform.SetParent(road);
newGround.transform.position = new Vector3(pos.x + width, 0);
isGenerated = true;
}
private void RemoveUnnecessaryGround()
{
if (road.childCount > 3)
{
Destroy(road.GetChild(0).gameObject);
}
}
}每个地方都可以有一些随机产生的障碍物。当我创建一个新的地方时,有一个以前的地面的副本,名字是“(克隆)(克隆)”,并且是随机生成的障碍物。结果
据我所知,问题是从先前克隆的对象创建的克隆“背景”不是来自于预置,也不是来自游戏中预置的更改。您可以看到这里的“地面(克隆)”(克隆),其中BarrierSpawn有几个障碍物,但每个地面只能有一个障碍物。当地面被实例化时,屏障就会产生。
有阻拦系统:
public class BarrageSpawnSystem : MonoBehaviour
{
public GameObject[] barrageArr;
// Start is called before the first frame update
void Start()
{
Transform spawnPoint = GetSpawnPoint();
GameObject barrage = GetBarrage();
Debug.Log(barrage.transform.name);
Instantiate(barrage, spawnPoint);
}
GameObject GetBarrage()
{
return barrageArr[Random.Range(0, barrageArr.Length)];
}
Transform GetSpawnPoint()
{
return transform.GetChild(Random.Range(0, transform.childCount));
}
}发布于 2020-12-17 19:58:34
我解决了这个问题。我的“地面”游戏对象包含带有触发器的空对象,从预制件中创建新的“地面”对象。现在,我创建了独立的系统,它产生了我的基础和它的工作格栅。但我还是不明白为什么会这样。
https://stackoverflow.com/questions/65341911
复制相似问题