所以我尝试使用C#代码统一制作一个游戏,现在......我有一个跳过挂架的立方体......它是一个无限的亚军游戏。
问题在于我想根据立方体行进的距离来生成挂架......
让我们说这个立方体已经走了12米,每当幼崽走过那个距离时我想要产生一个新的pilon,所以它走了12米,产生了一个新的塔,它又行进了12米,产生了一个新的塔等等...
我想让幼崽旅行越来越快,这就是为什么我需要知道塔架需要产生的距离。
我尝试使用函数Instantiate()
,并使用if语句查找多维数据集的transform.position.z
。
真正的问题是,每次立方体行进12米并且是时候实例化一个新的塔架,它会产生20个塔架,因为我在更新功能中使用它,并且它将该位置视为浮动,实例化全数,12,1; 12,2; 12,3; 134 ......直到; 12,99 ......我想知道如何只生产一次塔架。
另外......如果您有更好的产生挂架的解决方案,请告诉我。
This is the code that I used to spawn the pylons ,respectively the functions that I used.
Some of this are the variables that I used.
public float cameraSpeed = 1;
public float horizontalSpeed;
private int spawnIndex;
public float spawnDistance;
private int[] prevPoints;
public GameObject[] pilon;
public GameObject spawnMainPoint;
public Transform[] spawnPoints;
public Transform[] coinsSpawnPoint;
public float enamySpeed;
private int currentPoint;
public Transform[] pointPosition;
void FixedUpdate () {
int currPosition = (int)transform.position.z;
if (currPosition % spawnDistance == 0f) {
SpawnCoinPylon ();
SpawnNormalPylon ();
}
void SpawnNormalPylon ()
{
spawnIndex = Random.Range (0, spawnPoints.Length);
Instantiate (pilon[0], spawnPoints [spawnIndex].position,spawnPoints [spawnIndex] .rotation);
}
void SpawnCoinPylon(){
Instantiate (pilon[1], coinsSpawnPoint [0].position,spawnPoints [spawnIndex] .rotation);
}
谢谢!
更新:
private int currPosition ;
void Start () {
currPosition = (int) transform.position.z;
}
void FixedUpdate () {
bool hasSpawnedPylon = false;
if (currPosition != (int)transform.position.z) {
if ((int)transform.position.z % spawnDistance == 1) {
if (!hasSpawnedPylon) {
SpawnCoinPylon ();
SpawnNormalPylon ();
currPosition = (int)transform.position.z;
}
}
}
else
{
hasSpawnedPylon = false;
}
}
void SpawnNormalPylon ()
{
spawnIndex = Random.Range (0, spawnPoints.Length);
Instantiate (pilon[0], spawnPoints [spawnIndex].position,spawnPoints [spawnIndex] .rotation);
}
void SpawnCoinPylon(){
Instantiate (pilon[1], coinsSpawnPoint [0].position,spawnPoints [spawnIndex] .rotation);
}
答案 0 :(得分:1)
我希望这能解决你的问题。
bool hasSpawnedPylon = false;
void FixedUpdate()
{
int currPosition = (int)transform.position.z;
if (currPosition % spawnDistance == 0f)
{
if (!hasSpawnedPylon)
{
SpawnCoinPylon();
SpawnNormalPylon();
}
}
else
{
hasSpawnedPylon = false;
}
}
请注意,检查floats
是否与0f
完全相同是一种不好的做法,会导致您不会发现的错误。通常最好将其与(difference of two floats) < some small threshold values
进行比较。这是因为在floats
值时,int
通常会存在微小差异。例如,5.0f
通常存储为0.4999f
或0.5001f
。