在 Unity 中销毁实例化游戏对象的问题
Posted
技术标签:
【中文标题】在 Unity 中销毁实例化游戏对象的问题【英文标题】:Problems with Destroying Instantiated Gameobject in Unity 【发布时间】:2021-01-26 23:26:18 【问题描述】:我实例化了Gameobject
,现在我想销毁它,但由于一些未知的原因我找不到这样做的方法。当我检查对象的位置是否小于某个数字时,即使它更小它也不会在 if 语句中执行代码:下面是代码,如果有人知道如何销毁这些实例化对象:
[SerializeField]
GameObject Jabuka;
[SerializeField]
GameObject kruska;
[SerializeField]
GameObject brisacDonji;
[SerializeField]
GameObject brisacGornji;
public float MoveSpeed = 3f;
public GameObject spawnerOdozgo;
public GameObject spawnerOdozdo;
GameObject UIjabuka;
GameObject UIkruska;
Rigidbody2D jabukaRig;
Rigidbody2D kruskaRig;
float minx = -2f;
float maxx = 2f;
float vrijemeSpawna = 2f;
float nextSpawn = 0f;
int staSpawnati;
int SpawnGoreILidole;
float positionPos;
public float veclocityI;
private Vector2 screenBounds;
// Start is called before the first frame update
void Start()
screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z));
// Update is called once per frame
void Update()
veclocityI = Random.Range(2, 6);
positionPos = Random.Range(minx, maxx);
SpawnGoreILidole = Random.Range(1, 3);
switch (SpawnGoreILidole)
case 1:
spawnOdozgo();
break;
case 2:
spawnOdozdo();
break;
void FixedUpdate()
public void spawnOdozgo()
if (Time.time > nextSpawn)
staSpawnati = Random.Range(1, 3);
Debug.Log("sta" + staSpawnati);
switch (staSpawnati)
case 1:
UIjabuka = Instantiate(Jabuka, new Vector3(positionPos, spawnerOdozgo.transform.position.y, 1), transform.rotation);
jabukaRig = UIjabuka.GetComponent<Rigidbody2D>();
jabukaRig.velocity = new Vector2(0, -veclocityI);
if (UIjabuka.transform.position.y < brisacDonji.transform.position.y)
Destroy(UIjabuka);
Debug.Log("unisteno je");
break;
case 2:
UIkruska = Instantiate(kruska, new Vector3(positionPos, spawnerOdozgo.transform.position.y, 1), transform.rotation);
kruskaRig = UIkruska.GetComponent<Rigidbody2D>();
kruskaRig.velocity = new Vector2(0, -veclocityI);
break;
nextSpawn = Time.time + vrijemeSpawna;
public void spawnOdozdo()
if (Time.time > nextSpawn)
staSpawnati = Random.Range(1, 3);
Debug.Log("sta" + staSpawnati);
switch (staSpawnati)
case 1:
UIjabuka = Instantiate(Jabuka, new Vector3(Random.Range(minx, maxx), spawnerOdozdo.transform.position.y, 1), transform.rotation);
jabukaRig = UIjabuka.GetComponent<Rigidbody2D>();
jabukaRig.velocity = new Vector2(0, veclocityI);
break;
case 2:
UIkruska = Instantiate(kruska, new Vector3(Random.Range(minx, maxx), spawnerOdozdo.transform.position.y, 1), transform.rotation);
kruskaRig = UIkruska.GetComponent<Rigidbody2D>();
kruskaRig.velocity = new Vector2(0, veclocityI);
break;
nextSpawn = Time.time + vrijemeSpawna;
【问题讨论】:
【参考方案1】:我没有足够的时间查看您的整个代码。但是,如果您的 switch 语句 case 不是 1,那么您的 if 语句将永远不会执行。您需要确保您的变量:staSpawnati
设置为 1,如果您希望对象被销毁。
【讨论】:
UI jabuke 的位置是 f.e -20,brisacDonji 的位置是-10,即使位置较低,if 语句的代码也不会执行。 如果你的 staSpawnati 不是 1 你的 switch 语句不会执行你的 if 语句【参考方案2】:从上面发布的代码中,您需要满足 3 个条件才能达到 Destroy 功能。
-
SpawnGoreILidole 必须为 1 才能满足第一个 switch case 并进入 spawnOdozgo()
staSpawnati 必须为 1 以满足第二个 switch case 并进入 Destroy 所在的代码部分。
UIjabuka.transform.position.y 必须小于 brisacDonji.transform.position.y,然后 Destroy 将在 UIjabuka 游戏对象上执行。
在我看来,这段代码毫无意义,因为您将破坏上面 4 行创建的 GameObject。但这些是执行 Destroy 所需的条件。
【讨论】:
以上是关于在 Unity 中销毁实例化游戏对象的问题的主要内容,如果未能解决你的问题,请参考以下文章