当有什么东西击中球员,可能是敌人或刺等,我希望他被击倒在敌人的方向。
所以我已经得到了:
public void ChangeHealth(float healthToAdd, Vector2 objectPosition) // Change the players health, objectPosition = enemies position or something else
{
if (healthToAdd < 0) // incoming damage
{
// ... other stuff
Knockback(objectPosition);
}
// ... other stuff
}
void Knockback(Vector2 objectPosition) // Knockback routine
{
Vector2 knockbackPosition = new Vector2( , ); // calculation is missing here! Calculate the new position by the knockback direction
rigid.MovePosition(Vector2.MoveTowards(playerPos, knockbackPosition, 2 * Time.deltaTime)); // the knock back
}
private void Update() // !! TEST !!
{
if (Input.GetKeyDown(KeyCode.E)) // TEST routine
{
ChangeHealth(-7, new Vector2(10,10)); // decrease players health by 7 and knock him back
}
}所缺少的是:
Vector2 knockbackPosition = new Vector2( , );我正在寻找像这张图片所显示的那样的计算:

发布于 2017-04-02 13:32:45
Vector2 knockbackPosition =
transform.position + (transform.position - objectPosition).normalized *a要理解为什么这等于你必须通读一遍。
有三点: E,P,K(敌人,玩家,击退)
还有一个标量数:a(这个值越大,你就会有越多的回击)
从你的照片上看:
PK = EP*a
将向量扩展到两点之间的距离:
(K-P) = (P-E)*a
计算K的位置:
K = P + (P-E)*a
不过有一个问题。(感谢Rotem)按照这个公式:
你会期待一个更大的击退从一个更近的对手。
我们不希望击退依赖于P和E之间的距离。
若要移除对前者的依赖,请在将向量乘以
因此,我们将.normalized添加到(P-E)的方向,而不是它的原始向量。
https://stackoverflow.com/questions/43168790
复制相似问题