如何修复"rigidbody2D is obsolete"错误



所以我一直在学习关于Unity中二维运动的教程,视频成功地运行了代码。然而,当我运行代码时,Unity说:线路

public Vector2 Velocity => rigidBody2D.velocity;

是错误,它迫使我改用GetComponent。所以我遵循它并将代码更改为:

public Vector2 Velocity
{
get => GetComponent<Rigidbody2D>().velocity;
set => GetComponent<Rigidbody2D>().velocity = value;
}

我做得对吗?

是的,你的变体是合法的以下情况更为常见:

private Rigidbody2D rb2d;
public Vector2 Velocity;
void Start(){
rb2d = GetComponent<Rigidbody2D>();
}
void Update(){
rb2d.velocity = Velocity;
}

我唯一的建议是在Start中也获得引用,因为一直使用GetComponent有点浪费性能。

使用GetComponent<Rigidbody2D>()而不是过时的Component.rigidbody2D是很好的。

但是,存储返回的对象,而不是在每次需要引用它时(包括在调用Velocity属性期间(查找它,是更好的。这将带来更好的性能

更改:

public Vector2 Velocity
{
get => GetComponent<Rigidbody2D>().velocity;
set => GetComponent<Rigidbody2D>().velocity = value;
}

至:

public Vector2 Velocity
{
get => GetComponent<Rigidbody2D>().velocity;
set => GetComponent<Rigidbody2D>().velocity = value;
}

private Rigidbody2D _rigidBody;
private Start()
{
_rigidBody = GetComponent<Rigidbody2D>();
}
public Vector2 Velocity
{
get => _rigidBody.velocity;
set => _rigidBody.velocity = value;
}

最新更新