在Unity中,我尝试制作一个地面,它是矩阵的形式,随着我的播放器和摄像机在场景中的移动而逐步生成。想象一下,每当玩家距离末尾足够近时,矩阵都会添加新行。
我已经有了玩家运行的基础。地面由大小相等的不同方形预制件制成。我正在使用此代码从GameObject数组中随机选择一个预制件,并从中构建一个矩阵来代表我的立场。现在,我正在运行时生成整个地面,但是我想做到这一点,以便随着玩家的进步,它在矩阵中无限生成新行。 我尝试将距离变量与实例化转换位置相乘,使其看起来像这样:
GameObject theTile =实例化(thePrefab,transform + transform.forward * distanceAhead);
我还尝试设置一个名为SpawnPoint的空GameObject作为Camera的子代,它随Camera和我的LevelInstancing一起移动一点,并且如果与SpawnPoint相交,则应该在其中生成另一行预制件矩阵,代码看起来像这样:
void CreateMap()
{
for (int row = 1; row <= myGrid.y; row++)
{
for (int col = 1; col <= myGrid.x; col++)
{
if(transform.position.z < spawnPoint.transform.position.z)
{
transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + distance);
int n = Random.Range(0, prefabTiles.Length);
GameObject thePrefab = prefabTiles[n];
GameObject theTile = Instantiate(thePrefab, transform);
theTile.name = "Tile_" + col + "_" + row;
theTile.transform.localPosition = new Vector3((col - 1) * tileDimensions.x, 0, (row - 1) * tileDimensions.z);
mapList.Add(theTile);
}
}
}
}
但是它不能正常工作。
这是我现在正在使用的工作代码。
void Start()
{
CreateMap();
}
void CreateMap()
{
for (int row = 1; row <= myGrid.y; row++)
{
for (int col = 1; col <= myGrid.x; col++)
{
int n = Random.Range(0, prefabTiles.Length);
GameObject thePrefab = prefabTiles[n];
GameObject theTile = Instantiate(thePrefab, transform);
theTile.name = "Tile_" + col + "_" + row;
theTile.transform.localPosition = new Vector3((col - 1) * tileDimensions.x, 0, (row - 1) * tileDimensions.z);
mapList.Add(theTile);
}
}
}