Unity2D C#在一个区域中随机生成GameObject而不是另一个GameObject

时间:2017-02-17 12:26:27

标签: c# unity3d unity5 gameobject

我是Unity2D的新手(Unity 5.0.2f1)并且一直在寻找一种解决方案,我肯定会盯着我!

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

enter image description here

我有一个产生GameObjects(车辆)的产卵者。我想在这条路上产生这些车辆。

我已经尝试过以下代码来实现这一点,主要是通过获得道路的Y坐标和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);
}

这确实是随机产生的,但大多数时候它总是不在道路内。它既可以是道路的一部分,也可以是它的外边缘。

我无法弄清楚我在这里做错了什么,但我确信这很简单!

2 个答案:

答案 0 :(得分:1)

您正在使用localPosition。来自documentation

  

变换相对于父变换的位置。

     

如果转换没有父项,则它与Transform.position相同。

观察你的场景,你的道路有一个父对象,你所获得的相对位置可能会弄乱汽车的产生位置。

答案 1 :(得分:1)

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