首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实例化一个唯一的预制件?

如何实例化一个唯一的预制件?
EN

Stack Overflow用户
提问于 2020-12-17 13:43:31
回答 1查看 67关注 0票数 0

我是新来的团结一心的人,我想成为一个无穷无尽的跑步者。我有“路”空的游戏对象,其中的“地面”被创造。地面是游戏对象,它包含一些其他的对象和触发器。地面游戏对象。当player触发"EndTrigger“脚本"GroundGenerator”时,会创建新的基础:

代码语言:javascript
复制
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有几个障碍物,但每个地面只能有一个障碍物。当地面被实例化时,屏障就会产生。

有阻拦系统:

代码语言:javascript
复制
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));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 19:58:34

我解决了这个问题。我的“地面”游戏对象包含带有触发器的空对象,从预制件中创建新的“地面”对象。现在,我创建了独立的系统,它产生了我的基础和它的工作格栅。但我还是不明白为什么会这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65341911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档