C# 使用bool停止对象在更新中多次实例化
这是剧本。我希望每次y位置是4的倍数时,对象只实例化一次。但只要y位置停留在4,对象就会被实例化多次。我希望它只实例化一次。这是剧本C# 使用bool停止对象在更新中多次实例化,c#,unity3d,unity5,C#,Unity3d,Unity5,这是剧本。我希望每次y位置是4的倍数时,对象只实例化一次。但只要y位置停留在4,对象就会被实例化多次。我希望它只实例化一次。这是剧本 public GameObject obj; bool check = true; private void Update() { if (Mathf.Round(transform.position.y) % 4 == 0 && check) { check = false; Spawn();
public GameObject obj;
bool check = true;
private void Update()
{
if (Mathf.Round(transform.position.y) % 4 == 0 && check)
{
check = false;
Spawn();
}
}
public void Spawn()
{
Instantiate(obj, new Vector3(transform.position.x, transform.position.y), Quaternion.identity);
check = true;
}
谢谢。单个
bool
是不够的,因为您需要多次实例化一个对象。您想检查它是否已经在此位置实例化
public GameObject obj;
float lastInstPos = 0;
private void Update()
{
var currPos = Mathf.Round(transform.position.y);
if (currPos % 4 == 0 && currPos != lastInstPos)
{
lastInstPos = currPos;
Spawn();
}
}
public void Spawn()
{
Instantiate(obj, new Vector3(transform.position.x, transform.position.y), Quaternion.identity);
}
如果要包含0
,则将lastInstPos
设置为任意值,例如lastInstPos=float.MinValue
更新:此解决方案假定
y
增加或减少,但不同时增加或减少。只需使用Instantiate的返回值,并将每个实例放入一个y位置作为键的字典中-在启动前检查此y位置是否已经是字典中的键:
public GameObject obj;
private Dictionary<int, GameObject> myInst = new Dicitionary<int, GameObject>();
private void Update()
{
int pos = (int)Mathf.Round(transform.position.y);
if (pos % 4 == 0 && !myInst.ContainsKey(pos)) // check if key exists
{
myInst[pos] = Spawn(); // add gameObject to dictionary
}
}
// return the gameObject you spawned
public GameObject Spawn()
{
return Instantiate(obj, new Vector3(transform.position.x, transform.position.y), Quaternion.identity);
}
公共游戏对象obj;
私有字典myInst=新的Dictionary();
私有void更新()
{
int pos=(int)Mathf.Round(transform.position.y);
if(位置%4==0&&!myInst.ContainsKey(位置))//检查键是否存在
{
myInst[pos]=Spawn();//将游戏对象添加到字典
}
}
//返回您生成的游戏对象
公共游戏对象生成()
{
返回实例化(obj,新向量3(transform.position.x,transform.position.y),四元数.identity);
}
这样,您就可以知道每个实例化对象的确切y坐标
如果您不需要实例GameObject,只需实例化y位置的
哈希集即可。Dictionary和Hashset都有非常快速的O(1)键查找,存储对实例化对象的引用不会占用太多空间,而且通过搜索(如果您需要的话)更容易在此处检索。谢谢您,但我有另一个解决方案。当位置不是4的倍数时,简单地输入check=true!那很好!如果游戏启用“上下”功能,您将在同一y坐标上实例化多个对象