如何让 Rigidbody2D.MovePosition 在本地空间中移动游戏对象?

Posted

技术标签:

【中文标题】如何让 Rigidbody2D.MovePosition 在本地空间中移动游戏对象?【英文标题】:How do I make Rigidbody2D.MovePosition move a gameobject in local space? 【发布时间】:2022-01-15 13:14:11 【问题描述】:

我找到了一种方法来查找标题中关于 Rigidbody 而不是 Rigidbody2D 的内容,因为原始方法涉及使用 Transform.TransformDirection(),它仅在 Vector3 上起作用,而 Rigidbody2D.MovePosition 在 Vector2 上起作用。我基本上需要一颗子弹才能向前移动,还有两颗子弹向前移动,但以 45 度角差旋转。

我该怎么做呢?

【问题讨论】:

你已经尝试了什么? 【参考方案1】:

我假设您有一个子弹预制件,并且您一次实例化 3 个子弹,但希望其中 2 个分别位于 -45 度和 45 度。

//bullet 是你拥有的任何预制件

var bl = Instantiate(bullet);
var bl = Instantiate(bullet);
bl.transform.rotation = //Set rotation here to 45 deg
var bl = Instantiate(bullet);
bl.transform.rotation = //Set rotation here to -45 deg

【讨论】:

【参考方案2】:

你的问题让我想起了我前段时间为 game jam 做的一个游戏,所以我检查了代码,似乎我使用了Quaternion.AngleAxis 来旋转子弹。

我假设您有一个要克隆的预制件的引用(在本例中,它是 projectilePrefab),以及一个代表您要拍摄的位置和旋转的 firePoint 变换中间的弹丸。

// Middle Bullet
GameObject mBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
var mRb = mBullet.GetComponent<Rigidbody2D>();
middleRb.AddForce(mRb.transform.up * velocity, ForceMode2D.Impulse);

// Left Bullet
GameObject lBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
// Rotate here
lBullet.transform.up = Quaternion.AngleAxis(-45, Vector3.forward) * firePoint.transform.up;
var lRb = lBullet.GetComponent<Rigidbody2D>();
lRb.AddForce(lBullet.transform.up * velocity, ForceMode2D.Impulse);

// Right Bullet
GameObject rBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
// Rotate here
rBullet.transform.up = Quaternion.AngleAxis(45, Vector3.forward) * firePoint.transform.up;
var lRb = lBullet.GetComponent<Rigidbody2D>();
lRb.AddForce(lBullet.transform.up * velocity, ForceMode2D.Impulse);

如果您在使用此代码时遇到任何问题,请告诉我,我现在无法对其进行测试。

【讨论】:

【参考方案3】:

Vector2Vector3 之间存在implicit conversion 和vise versa。这两种类型都可以或多或少地使用可交换的,这将创建一个Vector3,其中z 只是0,或者只使用xy 创建一个Vector2,而忽略z

您可以简单地将Vector3 作为参数传递给Rigidbody2D.MovePosition,它会隐式将其转换为Vector2,而忽略Z 组件。

【讨论】:

以上是关于如何让 Rigidbody2D.MovePosition 在本地空间中移动游戏对象?的主要内容,如果未能解决你的问题,请参考以下文章

Jfreechart柱状图如何让变成纯色

android中如何让文字环绕图片

如何让GridView 标题居中

请教如何让UIActivityIndicatorView永远居中

如何让ActionBar标题居中

EBS如何让从值集不显示