Unity2D C# 在另一个游戏对象上方的区域中随机生成游戏对象

Unity2D C# Randomly Spawn GameObject in an Area over another GameObject

我是 Unity2D (Unity 5.0.2f1) 的新手,一直在寻找解决方案,我确信它正盯着我看!

我有一个游戏对象(本质上是一条路),如下所示 (DirtTrack1):

我有一个生成游戏对象(车辆)的生成器。我想在这条路上生成这些车辆。

我尝试了以下代码来执行此操作,本质上是尝试通过获取道路的底部 Y 坐标和顶部 Y 坐标来在道路的 Y 轴区域内生成车辆,所以我得到了我可以放置车辆的最小和最大垂直位置:

void FixedUpdate() {

    // Repeat spawning after the period spawn
    // route has finished.
    if (!_inSpawningIteration)
        StartCoroutine (SpawnVehiclePeriodically());
}

IEnumerator SpawnVehiclePeriodically()   
{
        // First, get the height of the vehicle and road.
        float vehicleHeightHalf = vehiclePreFab.GetComponent<SpriteRenderer>().bounds.size.y / 2f;
        float roadHeightHalf = roadObject.GetComponent<SpriteRenderer>().bounds.size.y / 2f;

        float roadTopY = roadObject.transform.position.y + roadHeightHalf;
        float roadBottomY = roadObject.transform.position.y - roadHeightHalf;

        // Next, ensure that maxY is within bounds of this farm vehicle.
        roadMaxY = roadTopY - vehicleHeightHalf;
        roadMinY = roadBottomY + vehicleHeightHalf;

    // Set the position and spawn.
    Vector3 newPosition = new Vector3 (Const_RoadItemsPositionX, randomY, 0f);
    GameObject vehicle = (GameObject)GameObject.Instantiate (vehiclePreFab, newPosition, Quaternion.identity);
}

它确实会随机生成,但大多数时候它总是不在道路内。它要么在道路上,要么在道路的外侧边缘。

我不知道我做错了什么,但我确定这很简单!

您正在使用 localPosition。来自 documentation:

Position of the transform relative to the parent transform.

If the transform has no parent, it is the same as Transform.position.

看看你的场景,你的道路有一个父对象,你得到的相对位置可能会弄乱汽车的生成位置。

勾选车辆的运动学检查,如果不这样做,物理学可能会将其移出道路。