实例化对象不包含碰撞器

时间:2020-05-13 12:39:09

标签: c# unity3d

我今天偶然碰到一个问题,当时我只是在做一个乒乓球比赛,我制作了一个脚本,将球预制了起来,当进球时,球将重置并再次移动。但是,当球的实例化版本变为现实时,它并没有与任何东西发生碰撞!它有一个刚体对撞机和一个盒子对撞机!

PS:运行过程中一切正常,因为没有通过代码实例化任何东西

这是我的代码:

public class Ball : MonoBehaviour
{
    [SerializeField]
    private Rigidbody2D rb;
    [SerializeField]
    private float speed = 10;
    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
        Launch();
        this.gameObject.name = "Ball";
        BoxCollider boxCollider = gameObject.AddComponent<BoxCollider>();
        Rigidbody2D gameObjectsRigidBody = this.gameObject.AddComponent<Rigidbody2D>();
    }
    // Start is called before the first frame update
    void Start()
    {


    }

    // Update is called once per frame
    void Update()
    {

    }

    private void Launch()
    {
        //code used to determine in which direction the ball should go when it spawns
        float x = Random.Range(0, 2) == 0 ? -1 : 1;
        float y = Random.Range(0, 2) == 0 ? -1 : 1;
        rb.velocity = new Vector2(speed * x, speed * y);
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

我想出了解决这个问题的办法,但并未完全解决。我以为我会在这里回答,以防有人出现同样的问题。 因此,即使禁用了该程序,也始终会调用Awake函数。因此,当实例化我的对象时,脚本处于非活动状态,但仍处于唤醒状态,导致我将所有起始代码都放在awake函数中。

要激活脚本,请执行以下操作:

private Scriptname script;

private void Awake()
{
    script = GetComponent<ScriptName>();
    script.enabled = true;
}

有关此主题的更多信息here