【问题标题】:Setting Rigidbody2D body type to "static" in code?在代码中将 Rigidbody2D 身体类型设置为“静态”?
【发布时间】:2016-12-21 22:09:14
【问题描述】:

我最近更新了我的 Unity(从 5.4.1f1 到 5.5.0f3),现在我的一个游戏中的 Rigidbody2D 似乎有些问题。

所以基本上我曾经使用此代码使我的游戏对象(玩家)变得难以处理并脱离物理控制:

Player.GetComponent<Rigidbody2D>().isKinematic = true;

这在 Unity 更新后无法正常工作,并且在将播放器设置为运动学时,它会一直朝着与“动态”(但无法控制)时相同的方向移动。注意:Unity 5.4.1f1 中并非如此。

所以我进入 Rigidbody2D 组件并注意到它发生了变化。 How my old Rigidbody2D looked likeHow my new RigidBody2D looks like now

“kinematic”选项被移动到“body type”选项中,并且在运行时它确实使用“.isKinematic = true”字符串将body type更改为Kinematic(但它不能像前面提到的那样正常工作)。

所以我尝试在 runetime 中手动将 body type 值更改为“静态”,发现效果很好!

所以我的问题是:如何在代码中将正文类型更改为静态? (如“isKinematic”),以及 Rigidbody2D(和运动学?)的变化发生了什么

【问题讨论】:

  • 这个问题的答案似乎需要了解 Unity 类库,所以请考虑添加 unity3d 标签。
  • @O.R.Mapper 你好。对 Unity/C# 和术语来说还是有点新,所以我不太确定想要吗?据我所知,我没有使用“Unity 类库”。游戏对象“Player”没有被标记,而是通过“Public Gameobject Player”在代码中控制(在Unity中绘制到组件框“Player”中)。这是你要求的吗?还是我没有任何意义。提前致谢
  • @KristofferRasmussen 他的意思是你的问题是 Unity 特有的,所以用 unity3d 标记它(看起来 Scott 为你做了 :))
  • @LukeBriggs 哦,天哪。我很混乱。谢谢斯科特;)
  • @KristofferRasmussen:只要您使用 Rigidbody2DPlayer 之类的类型,您就在使用 Unity 类库(即 Unity 中包含的类集),因为这些类不可用没有统一。事实上,正如 Luke 所说,我指的是在此处标记您的问题 - 因为大多数了解 C# 的用户仍然不知道所提到的 Unity 类的细节。

标签: c# unity3d


【解决方案1】:

Rigidbody 上的bodyType property 可能就是您要找的:

Player.GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Static;

值得一提的是,如果在 Unity 的次要版本之间进行更新会破坏它,那么可能会出现其他问题,但如果没有看到更多您的项目,我无法确定。

【讨论】:

  • 这是完美的工作!谢谢。我确定我的代码有问题,但现在可以了。
  • @KristofferRasmussen 没问题!如果您确定这只是更新,那么它可能是 Unity 错误,或者您可能以他们不期望的方式使用 Unity。不过,这没什么好担心的——这也经常发生在我身上,我使用 Unity 已经有 8 年多了 :) 只要你了解什么是静态刚体并且这实际上就是你想要的,那就没问题了。
猜你喜欢
  • 2015-01-22
  • 2011-08-16
  • 2016-04-22
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多