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
.
看看你的场景,你的道路有一个父对象,你得到的相对位置可能会弄乱汽车的生成位置。
勾选车辆的运动学检查,如果不这样做,物理学可能会将其移出道路。
我是 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
.
看看你的场景,你的道路有一个父对象,你得到的相对位置可能会弄乱汽车的生成位置。
勾选车辆的运动学检查,如果不这样做,物理学可能会将其移出道路。