因此,我正在开发一种2D手机游戏,在该手机中,您向目标投掷长矛,该长矛在屏幕外产生并在一组固定的“导轨”上从右向左浮动(金达就像博览会上的那些摄影棚一样)。我想知道是否有可能/建议使用随机种子发芽器来设置目标的速度和产卵位置,而不是手动构建每个波和水平。这样,我可以测试它们并保存运行良好的种子。以便给每个波带来更随机的感觉,而不会完全随机并引起混乱。我对此很陌生,似乎找不到任何相关的文档。有任何想法吗?PS。我不确定我当前的目标生成器脚本在这里是否有用,如果是这样,请告诉我,我将其编辑到这篇文章中。提前致谢。
这听起来更像是一般的游戏设计/游戏开发问题,而不是Unity的技术问题。
[从技术角度看:使用随机值生成电平非常简单,比手动设计电平/波形要快。
[从游戏开发的角度来看:生成随机关卡,然后保存所需的关卡,可能比手工建立波浪/关卡要慢得多,也更难管理。可能无法很好解决的关键原因是,随着玩家技能的提高,您将需要扩展关卡的难度。这意味着创建后,您将需要根据一些标准对随机生成的电平/波进行排序。
[从游戏设计的角度来看:让随机值完全生成您的关卡(即使您管理它们)可能不是一个好主意。扩展游戏难度是成功的游戏互动循环的绝对核心部分。如果游戏变得太困难,太快,玩家将停止玩游戏。如果太容易了太长时间,玩家将停止游戏。如果它停滞不前,或者没有明显的逻辑而从容易变为困难,那么玩家将停止游戏。您想通过以下两种方式来轻松应对缩放困难:手动设计级别,或设计和完善生成关卡的算法。
也就是说,如果您想要一定程度的不可预测性,那么随机值应该是您游戏的一部分。但是您想管理随机性的影响,以确保它不会破坏游戏性。例如,一个简单的关卡可能使敌人以1到10之间的随机速度运动。一个坚硬的关卡可能使敌人以30到60之间的随机速度运动。换句话说,以受限的随机性构建关卡。使用约束条件来缩放难度。
那只是我的两分钱。
只要您以相同的顺序和相同的步骤使用实现,就可以将System.Random
与种子参数一起使用,一遍又一遍地获取相同的值。
var seed = 42;
var random = new System.Random(seed);
发生的一个问题是,如果更改源,您将不会获得相同的值。如果您在某个阶段为您的水平找到了一个不错的种子,那么当您添加了新内容(例如新的尖峰类型)之后,这可能会完全不同。
因此,我建议您在建立关卡时使用种子,然后保存关卡生成的结果。如果在更高版本中添加了新内容,则以前的级别将保持不变(希望如此)。但是,如果您将在运行时使用种子随机生成级别,则可能会得到不同的结果。
using System;
using System.Text;
public class Program
{
public static readonly int SEED = 42;
public static void Main()
{
Console.WriteLine("Using {1,2,3,4,5}");
int[] items = new int[] {1,2,3,4,5};
for(var i = 0 ; i < 10 ; i++)
{
RandomFromSeed(items);
}
Console.WriteLine("Using {1,2,3,4}");
items = new int[] {1,2,3,4};
for(var i = 0 ; i < 10 ; i++)
{
RandomFromSeed(items);
}
}
public static void RandomFromSeed(int[] items)
{
Random random = new Random(SEED);
StringBuilder sb = new StringBuilder();
for(var i = 0 ; i < 10 ; i++)
{
sb.Append(items[random.Next(0, items.Length)]);
}
Console.WriteLine(sb.ToString());
}
}
输出:
Using {1,2,3,4,5}
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
Using {1,2,3,4}
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314