我试图制作一种类似斜坡的游戏,每3秒就有新的障碍物出现。 我没有制作无限的生成点,而是想到制作第一个,并将z更改20个像素。问题是我不知道如何制作一个可以存储2个整数和一个变量的Vector3。
我有点卡住了,因为我不知道该怎么做,所以我没有尝试过任何东西。
using System.Collections.Generic;
using UnityEngine;
public class levelgen : MonoBehaviour
{
private int count = 9;
public GameObject[] templates;
// Update is called once per frame
void Update()
{
public Vector3 spawn = new Vector3(-2, 0, count);
int rand = Random.RandomRange(1, 5); //1-5 types of levels
Instantiate(templates[rand], spawn1, Quaternion.identity);
count = count + 20;
}
}
我想将变量计数存储在Vector3生成物中。
答案 0 :(得分:2)
您不能将其他任何内容存储到Vector3或任何其他内置变量中*。可以,并且应该为变量(如类或结构)创建自定义容器
public struct Custom
{
int a;
int b;
string name;
int count;
}
或类似
public struct Custom
{
Vector3 vec;
int count;
}
答案 1 :(得分:1)
每次您要更改新生成的z轴时,都需要将其重新分配给Vector3
变量。您可以在for循环中执行此操作,如下所示。
zPosition
将存储最新的zPosition值,因此您无需将其存储在其他任何地方。如果您想在前10个之后生成更多障碍物,那么它将从停止的zPosition
处拾取。
public class levelgen : MonoBehaviour
{
public GameObject[] templates;
public Vector3 spawn;
int zPosition = 0;
void Start()
{
GenerateObstacles(10);
}
void GenerateObstacles (int numObstacles)
{
for (int i = 0; i < numObstacles; i++)
{
spawn = new Vector3(-2, 0, zPosition);
int rand = Random.Range(0, 6); //1-5 types of levels
Instantiate(templates[rand], spawn, Quaternion.identity);
zPosition += 20;
}
}
}
答案 2 :(得分:1)
确定您可以 ..,但它将不再被称为count
,例如z
public class levelgen : MonoBehaviour
{
// You can not declare a public field within a method
// so move it to class scope
public Vector3 spawn = new Vector3(-2, 0, 9);
public GameObject[] templates;
// Update is called once per frame
void Update()
{
// Here NOTE that for int parameters the second argument is "exclusiv"
// so if you want correct indices you should always rather use
int rand = Random.RandomRange(0, templates.Length);
// I will just assume a typo and use spawn instead of spawn1
Instantiate(templates[rand], spawn, Quaternion.identity);
spawn.z += 20;
// Or I would prefer since this works in general
// Vector3.forward is a shorthand for writing new Vector3(0, 0, 1)
// and this works in general
spawn += Vector3.forward * 20;
// you can e.g. NOT use
//transform.position.z += 20
// but only
//transform.position += Vector3.forward * 20;
}
}
注意通常,让代码Instantiate
一个新对象每帧是一个非常糟糕的主意。如果您确实需要这么多对象,请检出Object Pooling