Vector3.Set和Rigidbody2D.velocity。设置和功能不正常

时间:2018-01-14 14:48:25

标签: c# unity3d properties

bodygameObject.GetComponent<Rigidbody2D> ()的简单移动脚本中,此代码会应用移动

body.velocity = new Vector2 (10 * dir, body.velocity.y);

然而,在这一个中没有出现移动(也没有错误)

body.velocity.Set (10 * dir, body.velocity.y);

我在Unity documentation中看不到任何解释。你能解释为什么body.velocity.x在第二种情况下仍为零吗?

1 个答案:

答案 0 :(得分:3)

这是人们在使用Unity时犯的错误之一。 你必须了解C#才能知道真正发生了什么以及为什么。

原因如下:

1 Rigidbody.velocityRigidbody2D.velocity都是Vector3Vector2的类型。

2 Vector3Vector2都是structs而非class

有关详细信息,请参阅struct vs class here

3 Rigidbody.velocityRigidbody2D.velocity是属性,并使用 getter 。这意味着它返回副本 Rigidbody2D.velocity而不是原始变量或它的引用,因为它们都是上面提到的结构。

有关详细信息,请参阅reference type and value type

4 。当您拨打Vector3.SetVector2.Set功能时,您正在Vector3Vector2的副本上拨打该功能实际或原始的Vector,这是由于#3

如果你真的想在Set上使用Rigidbody函数创建一个不同的Vector变量,你将用它来调用Set函数,然后将值赋给你的{{ 1}}。

例如,

Rigidbody.velocity