0
何かがプレーヤー、多分敵やスパイクなどに当たったとき、私は彼を敵の反対方向にノックバックしてもらいたい。Unity 2Dトップダウンゲームでプレーヤーをノックする
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(,);
表示されます。
現在の方法は、ノックバックベクトルの長さが2人のプレーヤー*と*の間の距離に依存するということです。これは対比的に直感的です。なぜなら、もしあなたがもっと近い相手からより大きなノックバックを期待しているからです。距離の依存関係を取り除くには、 'a 'を乗算する前に差分ベクトルを正規化します。 – Rotem
ありがとう@Rotem私はほとんどそれを逃した。 – Bijan
これはかなりうまくいった、ありがとう! :) – Question3r