spawer的游戏逻辑
Game logic of spawer
我是学生,我学习Unity3D引擎。我开始做小型 2D 游戏。
我需要一些游戏逻辑方面的帮助。具体如何在4列中合理生成游戏对象。在这个游戏中,我生成了从屏幕顶部掉落的游戏对象。我计算了覆盖屏幕的 4 列。我在这 4 列中随机生成游戏对象。但是游戏性并不好。我需要如何做得更好的建议。
我的想法是在行中生成一个或多个游戏对象并合理地旋转列。我已经在行中生成了对象。但是如何为切换列创建逻辑呢?类似开关的东西(现在是第一列,现在是第三列,现在是第一列和第四列等等)
这是我的生成方法:
// Use this for initialization
void Start ()
{
// width of one colums
widthColum = ScreenCalc.DivideScreenInColums(colums);
...
}
public void StartSpawn()
{
spawn = StartCoroutine(Spawn());
}
IEnumerator Spawn()
{
yield return new WaitForSeconds(1.5f);
time = GameController.instance.time;
while (true)
{
// Random select from prefabs
GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)];
// X is middle of random picked columns
float x = ScreenCalc.GenerateColumPos(geometryObject, colums);
Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f);
Quaternion spawnRotation = Quaternion.identity;
// Random object in row, will be spawned in one column
int rnd = Random.Range(1, 6);
// Spawn random count game object in one row
for (int i = 0; i < rnd; i++)
{
GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation);
// Get Sprite render
SpriteRenderer sr = temp.GetComponent<SpriteRenderer>();
// Change color of game object
sr.color = colors[Random.Range(0, colors.Length)];
// Get script for falling down
FallingDown fl = temp.GetComponent<FallingDown>();
// Increase fall
fl.fallSpeed += 0.1f;
// Wait between spawns
yield return new WaitForSeconds(Random.Range(0.35f, 1.0f));
}
yield return new WaitForSeconds(1.0f);
}
我尝试了更多的 Spawn 方法,每列一个,并随机生成等待时间。但是我的逻辑很糟糕,因为生成的对象太多或太低而导致一列相互碰撞。
这是我的想法的图片。
在图片上你可以看到屏幕分为4列,每一列都是生成位置。我需要帮助游戏逻辑如何随机切换对象的生成。
例如在第一列的行中生成 3 个对象。然后在第二列中生成 1 个对象。然后在第二列中生成 5 个对象,同时在第四列中生成 2 个对象。
不知道怎么解释比较好。我很抱歉我的英语。
您可能需要一种算法,以一种让您的游戏看起来很有趣的方式生成游戏对象,也许这种模式会对您有所帮助(您可以添加更多步骤)。
- 从右到左生成
- 从左到右生成
- 随机时间段重复以上两行
- 现在在随机点的四个位置随机生成
- 现在重复第 1 步
我想你想在每一列中独立于其他列生成。
您可以为 4 列添加 4 个 spawner 脚本。
在这 4 个脚本上设置唯一的列位置 (x)。
或者您可以为 4 列启动 4 个协程,例如:
public void StartSpawn()
{
StartCoroutine(Spawn(columnPos1));
StartCoroutine(Spawn(columnPos2));
StartCoroutine(Spawn(columnPos3));
StartCoroutine(Spawn(columnPos4));
}
IEnumerator Spawn(float columnPos)
{
yield return new WaitForSeconds(1.5f);
time = GameController.instance.time;
while (true)
{
// Random select from prefabs
GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)];
// X is middle of random picked columns
float x = columnPos;
Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f);
Quaternion spawnRotation = Quaternion.identity;
// Random object in row, will be spawned in one column
int rnd = Random.Range(1, 6);
// Spawn random count game object in one row
for (int i = 0; i < rnd; i++)
{
GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation);
// Get Sprite render
SpriteRenderer sr = temp.GetComponent<SpriteRenderer>();
// Change color of game object
sr.color = colors[Random.Range(0, colors.Length)];
// Get script for falling down
FallingDown fl = temp.GetComponent<FallingDown>();
// Increase fall
fl.fallSpeed += 0.1f;
// Wait between spawns
yield return new WaitForSeconds(Random.Range(0.35f, 1.0f));
}
yield return new WaitForSeconds(1.0f);
}
我是学生,我学习Unity3D引擎。我开始做小型 2D 游戏。
我需要一些游戏逻辑方面的帮助。具体如何在4列中合理生成游戏对象。在这个游戏中,我生成了从屏幕顶部掉落的游戏对象。我计算了覆盖屏幕的 4 列。我在这 4 列中随机生成游戏对象。但是游戏性并不好。我需要如何做得更好的建议。
我的想法是在行中生成一个或多个游戏对象并合理地旋转列。我已经在行中生成了对象。但是如何为切换列创建逻辑呢?类似开关的东西(现在是第一列,现在是第三列,现在是第一列和第四列等等)
这是我的生成方法:
// Use this for initialization
void Start ()
{
// width of one colums
widthColum = ScreenCalc.DivideScreenInColums(colums);
...
}
public void StartSpawn()
{
spawn = StartCoroutine(Spawn());
}
IEnumerator Spawn()
{
yield return new WaitForSeconds(1.5f);
time = GameController.instance.time;
while (true)
{
// Random select from prefabs
GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)];
// X is middle of random picked columns
float x = ScreenCalc.GenerateColumPos(geometryObject, colums);
Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f);
Quaternion spawnRotation = Quaternion.identity;
// Random object in row, will be spawned in one column
int rnd = Random.Range(1, 6);
// Spawn random count game object in one row
for (int i = 0; i < rnd; i++)
{
GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation);
// Get Sprite render
SpriteRenderer sr = temp.GetComponent<SpriteRenderer>();
// Change color of game object
sr.color = colors[Random.Range(0, colors.Length)];
// Get script for falling down
FallingDown fl = temp.GetComponent<FallingDown>();
// Increase fall
fl.fallSpeed += 0.1f;
// Wait between spawns
yield return new WaitForSeconds(Random.Range(0.35f, 1.0f));
}
yield return new WaitForSeconds(1.0f);
}
我尝试了更多的 Spawn 方法,每列一个,并随机生成等待时间。但是我的逻辑很糟糕,因为生成的对象太多或太低而导致一列相互碰撞。
这是我的想法的图片。
在图片上你可以看到屏幕分为4列,每一列都是生成位置。我需要帮助游戏逻辑如何随机切换对象的生成。
例如在第一列的行中生成 3 个对象。然后在第二列中生成 1 个对象。然后在第二列中生成 5 个对象,同时在第四列中生成 2 个对象。
不知道怎么解释比较好。我很抱歉我的英语。
您可能需要一种算法,以一种让您的游戏看起来很有趣的方式生成游戏对象,也许这种模式会对您有所帮助(您可以添加更多步骤)。
- 从右到左生成
- 从左到右生成
- 随机时间段重复以上两行
- 现在在随机点的四个位置随机生成
- 现在重复第 1 步
我想你想在每一列中独立于其他列生成。
您可以为 4 列添加 4 个 spawner 脚本。
在这 4 个脚本上设置唯一的列位置 (x)。
或者您可以为 4 列启动 4 个协程,例如:
public void StartSpawn()
{
StartCoroutine(Spawn(columnPos1));
StartCoroutine(Spawn(columnPos2));
StartCoroutine(Spawn(columnPos3));
StartCoroutine(Spawn(columnPos4));
}
IEnumerator Spawn(float columnPos)
{
yield return new WaitForSeconds(1.5f);
time = GameController.instance.time;
while (true)
{
// Random select from prefabs
GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)];
// X is middle of random picked columns
float x = columnPos;
Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f);
Quaternion spawnRotation = Quaternion.identity;
// Random object in row, will be spawned in one column
int rnd = Random.Range(1, 6);
// Spawn random count game object in one row
for (int i = 0; i < rnd; i++)
{
GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation);
// Get Sprite render
SpriteRenderer sr = temp.GetComponent<SpriteRenderer>();
// Change color of game object
sr.color = colors[Random.Range(0, colors.Length)];
// Get script for falling down
FallingDown fl = temp.GetComponent<FallingDown>();
// Increase fall
fl.fallSpeed += 0.1f;
// Wait between spawns
yield return new WaitForSeconds(Random.Range(0.35f, 1.0f));
}
yield return new WaitForSeconds(1.0f);
}