我遇到了一个问题,如果舞台上已经有一个预制件,我需要阻止创建一个新的对象(预制件)。我用GameObject.FindWithTag解决了这个问题,但也许还有其他方法
using UnityEngine;
public class CreateBullet : MonoBehaviour
{
public Transform firePoint;
public GameObject ballPrefab;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (GameObject.FindWithTag("ballBullet") == null)
{
CreatingBulletBall();
}
}
}
void CreatingBulletBall()
{
Instantiate(ballPrefab, firePoint.position, firePoint.rotation);
}
}
1条答案
按热度按时间soat7uwm1#
下面是你应该做的:
1.使用以下代码创建脚本
Bullet.cs
;1.将其作为组件添加到子弹预制件中;
1.如下所示更改
CreateBullet
类;1.将项目符号预置分配给
CreateBullet
组件的ballPrefab
字段(如果在脚本更改后未分配)。工作原理:如果
_bullet
字段为空,则创建新的项目符号并存储在其中。当项目符号被销毁时,它触发事件Destroyed
。回调OnBulletDestroyed
将为_bullet
分配空值,以便可以再次创建它。文件
CreateBullet.cs
:文件
Bullet.cs
:没有测试过,但应该能用,能用。
就性能而言,这是非常好的,习惯上只存储一次对对象的引用(通过Inspector,在
Start
/Awake
钩子中,当对象被示例化时,等等),而不是在Update
钩子中调用Find...()
或GetComponent()
方法中的任何一个。docs forFind()
方法声明您应该避免在每一帧都调用它。文件
CreateBullet.cs
: