unity3d 击退玩家

xqkwcwgp  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(319)

我想要一个击退效果与此代码,但我不知道如何。我是新的编码仍在学习的东西!
这是我的代码,我希望击退有效果。PlayerMovement。MyBody是一个脚本与刚体附加。

/// <summary>
    /// If We CanDamage LifeScorecount minus 1 and stes CanDamage to false and starts Coroutine. 
    /// If Life is higher than 0 change thet text to the new life
    /// If life is 0 then stop Time and start Coroutine RestartGame
    /// </summary>
    public void DealDamage()
    {
        if(CanDamage)
        {
            Anim.Play("Stun");
            LifeScoreCount--;
            Vector2 direction = (transform.position, 0);

            PlayerMovement.myBody.AddForce(direction * -10f);

            if (LifeScoreCount >= 0)
            {
                TextLife.text = "x" + LifeScoreCount;
            }
            if (LifeScoreCount == 0)
            {
                Time.timeScale = 0f;
                StartCoroutine(RestartGame());
            }
            CanDamage = false;
            StartCoroutine(WaitForDamage());
        }
    }
ruyhziif

ruyhziif1#

这取决于你如何实现你的移动和你想要你的回击看起来像什么。假设你只是想推开刚体,你可以像你已经尝试过的那样添加一个力。要使用“一次性”推动,你可以使用ForceMode.Impulse。对于你想要使用的方向,使用两个点。对象的变换位置,被推开,减去对象的变换位置,也就是把角色推开。所以如果你想让敌人推开玩家,你可以尝试这样的方法:

Vector3 playerPosition = new Vector3(transform.position.x, 0, transform.position.z);
Vector3 enemyPosition = new Vector3(enemy.transform.position.x, 0, enemy.transform.position.z);
Vector3 knockbackDirection = (playerPosition - enemyPosition).normalized;
float power = 2f
rb.AddForce(knockbackDirection * power, ForceMode.Impulse);

如果您还希望击退沿着y轴工作,只需使用变换位置而不是新的Vector3。如果您没有对敌人的引用,您可能需要添加一个参数,以便每当敌人伤害玩家时,他会将自己的位置作为参数传递。
也许可以考虑使用SerializeField作为击退力,这样你就可以很容易地在编辑器中编辑它。

相关问题