首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在统一2D TopDown游戏中击退玩家

在统一2D TopDown游戏中击退玩家
EN

Stack Overflow用户
提问于 2017-04-02 13:17:48
回答 1查看 1.3K关注 0票数 0

当有什么东西击中球员,可能是敌人或刺等,我希望他被击倒在敌人的方向。

所以我已经得到了:

代码语言:javascript
复制
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
        }
    }

所缺少的是:

代码语言:javascript
复制
Vector2 knockbackPosition = new Vector2( , );

我正在寻找像这张图片所显示的那样的计算:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 13:32:45

代码语言:javascript
复制
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)的方向,而不是它的原始向量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43168790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档