统一的刚体2D问题

Problems with rigidbody2D in unity

老实说,我不知道这段代码有什么问题。我想我还是 unity 的新手,很想得到一些帮助。

void Start()
{
    GameObject objToSpawn;
    objToSpawn = new GameObject("Obstacle");
    objToSpawn.AddComponent<Rigidbody2D>();
    objToSpawn.AddComponent<BoxCollider2D>();
    objToSpawn.AddComponent<SpriteRenderer>();
    Rigidbody2D rigid;
    rigid = GetComponent<Rigidbody2D>();
    rigid.gravityScale = 0;
    rigid.isKinematic = true;
    pos = objToSpawn.transform.position;


}

程序启动时,重力比例还是1,isKinematic还是false。为什么?

我建议你创建一个预制件然后实例化它。与您正在执行的操作相比,创建新对象是一种更好的方法。转到统一文档并检查其参数。

另一个答案是正确的。当你有一个复杂的对象时,你应该使用预制件并实例化它。我将解释为什么您拥有的代码也不起作用。你的错误在行

rigid = GetComponent<Rigidbody2D>();

这将获取当前脚本附加到的 GameObjectrigidBody2D。我猜你的意思是:

rigid = objToSpawn.GetComponent<Rigidbody2D>();

这将获取您刚刚实例化的对象上的 rigidBody2D,称为 objToSpawn