2017-08-10 65 views
0

我是新来的团结3d,我想做一个非常简单的障碍课程游戏。我不希望它有多个级别,而是每次有人开始游戏时只会有一个随机产生的场景。在随机产生的世界点产卵物体

这是一个图片,以更好地解释这个想法:

enter image description here

在每个突出部分会有这将每次应用程序启动和玩家只能通过一个缝隙让产生的壁这将在每个部分的任何区域a,b或c中随机生成。 我试过看这个,但这个例子并没有太多。

如果有任何问题,请不要犹豫。我总是收到回复通知。

谢谢你的时间!

回答

5

基本概念:

  1. 从障碍物
  2. 创建一个预制与一对夫妇的参数(每面墙,可能的位置之间的距离等),创建一个脚本(如WallSpawner),并将其连接到在你的场景中的一个对象(例如你的案例Walls)。
  3. StartAwake方法中,使用Instantiate创建预制件的副本并传入随机选取的位置。

示例脚本:

public class WallSpawner : MonoBehaviour 
{ 
    // Prefab 
    public GameObject ObstaclePrefab; 

    // Origin point (first row, first obstacle) 
    public Vector3 Origin; 

    // "distance" between two rows 
    public Vector3 VectorPerRow; 

    // "distance" between two obstacles (wall segments) 
    public Vector3 VectorPerObstacle; 

    // How many rows to spawn 
    public int RowsToSpawn; 

    // How many obstacles per row (including the one we skip for the gap) 
    public int ObstaclesPerRow; 

    void Start() 
    { 
     Random r = new Random(); 

     // loop through all rows 
     for (int row = 0; row < RowsToSpawn; row++) 
     { 
      // randomly select a location for the gap 
      int gap = r.Next(ObstaclesPerRow); 
      for (int column = 0; column < ObstaclesPerRow; column++) 
      { 
       if (column == gap) continue; 

       // calculate position 
       Vector3 spawnPosition = Origin + (VectorPerRow * row) + (VectorPerObstacle * column); 
       // create new obstacle 
       GameObject newObstacle = Instantiate(ObstaclePrefab, spawnPosition, Quaternion.identity); 
       // attach it to the current game object 
       newObstacle.transform.parent = transform; 
      } 
     } 
    } 
} 

示例参数:

Parameters in the Editor

实施例的结果:

Example Walls (5 per row)

+0

感谢。你不知道这对我有多大。对于由此造成的不便,我们深表歉意,但我非常感谢您的帮助。再次谢谢你!我现在感觉非常愚蠢。 –

+0

@PascalGamingYTPascalPlayz没问题。如果这回答你的问题,请点击我问题的左上角的复选标记,将其标记为答案并关闭问题。 –