Unity创建一个对象的两个克隆,尽管实例化只被调用一次

本文关键字:实例化 调用 一次 一个对象 创建 Unity 两个 | 更新日期: 2023-09-27 17:54:04

我正在Unity中制作一些敌人AI,但是当我尝试实例化单个炮弹时,它会在完全相同的位置创建两个。

实例代码:

void Shoot(Vector3 direction){
    GameObject EnemyLaser = (GameObject)Instantiate(Resources.Load("EnemyLaser"), FirePosition.transform.position, FirePosition.transform.rotation);
    EnemyLaser.renderer.material.color = gameObject.renderer.material.color;
    EnemyLaser.rigidbody.velocity = direction * laserPower;
}

发射代码:

void FireRaycast(){
    Vector3 direction = transform.TransformDirection(Vector3.forward);
    RaycastHit hit;
    Debug.DrawRay(transform.position, direction * range);
    if(Physics.Raycast(transform.position, direction, out hit, range)){
        if(hit.collider.tag == "Player"){
            if(currentTime > fireInterval){
                Shoot(direction);
                currentTime = 0;
            }
        }
    }
    currentTime += Time.deltaTime;
}

这会导致多种问题,例如两个弹丸因为它们的对撞机而不移动等等。

我已经尝试使用布尔值来检查函数只调用一次,但它仍然创建两个对象。

Unity创建一个对象的两个克隆,尽管实例化只被调用一次

我不知道你的问题是否解决了,但是这种情况也发生在我身上,原因与前面提到的不同。

在我的例子中,我使用鼠标点击事件来生成环境中的对象。我使用的是Input.GetMouseButtonDown(0),由于某种原因,每次点击都会返回true两次,从而创建我的预制的两个实例。

我的解决方案是放置一个时间约束关于新对象实例化的频率。之后,每次鼠标点击只创建一个实例。