计算刚体的力取决于它离另一个游戏对象的中心有多远?



目前正在制作包含火箭跳跃的Unity 2D游戏(如《军团要塞2》,《雷神之锤》)。我已经成功地创建了代码,根据爆炸预制件(这只是一个圆圈)的位置,将玩家发射到正确的方向。我希望实现一个乘数,根据玩家与爆炸的距离改变施加的力。

我尝试使用Vector2。距离,但我没有运气想办法把它转换成一个有意义的值。

这是我当前的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HandleExplosion : MonoBehaviour
{
[SerializeField] float launchSpeed;
[SerializeField] float explosionTime;
private void Start()
{
StartCoroutine(DeleteExplosion());
}
private void OnCollisionEnter2D(Collision2D player)
{
if (player.gameObject.CompareTag("Player"))
{
Debug.Log(CalculateForceMultiplier(player));
Vector2 launchPos = player.transform.position - transform.position;
player.gameObject.GetComponent<Rigidbody2D>().AddForce(launchPos * launchSpeed * CalculateForceMultiplier(player), ForceMode2D.Impulse);
}
}
float CalculateForceMultiplier(Collision2D player)
{
return Vector2.Distance(player.transform.position, transform.position); 
}
IEnumerator DeleteExplosion() {
yield return new WaitForSeconds(explosionTime);
Destroy(gameObject);
}
}
float CalculateForceMultiplier(Collision2D)
{
Vector2 _dist = Vector2.Distance(player.transform.position, transform.position);
return _dist != 0 ? 1f / _dist : 100f;
}

在你的代码中,该方法返回爆炸和玩家之间的距离。通过这样做,玩家离得越远,返回值就越大,离得越近,返回值就越小,我直觉地认为这与你想要的相反。在我编写的方法中,我检查爆炸与玩家之间的距离是否不同于0,如果是真的,我返回1/距离,即它越近,返回值将越大,而距离越远,返回值将越接近0。如果两个对象在相同的位置,尝试用1除以距离,也就是0,你会得到一个异常,所以如果发生这种情况,我设置一个非常大的值来返回,因为理想情况下功率是最大的。