gpt4 book ai didi

c# - Vector3.Set 和 Rigidbody2D.velocity.Set 和功能无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:17 25 4
gpt4 key购买 nike

在一个简单的移动脚本中,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在第二种情况下保持为零?

最佳答案

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

原因如下:

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

2Vector3Vector2 都是structs 而不是 class

参见 structclass here了解更多信息。

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

参见 reference type and value type有关这方面的更多信息。

4。当您调用 Vector3.SetVector2.Set 函数时,您是在 的副本上调用它>Vector3Vector2 不是实际的或原始的 Vector,这是由于#3

如果您真的想在 Rigidbody 上使用 Set 函数,请创建一个不同的 Vector 变量,您将使用它来调用该 Set 函数然后将值分配给您的 Rigidbody.velocity

例如,

Rigidbody2D body = null;
float dir = 4f;

Vector2 pos = Vector2.zero;

void YourFunction()
{
pos.Set(10 * dir, body.velocity.y);
body.velocity = pos;
}

关于c# - Vector3.Set 和 Rigidbody2D.velocity.Set 和功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com