c# - Addforce 不会击退我的玩家角色

标签 c# unity3d

我正在尝试为我的玩家添加击退,但他不会移动。我知道函数被正确调用并且 if 语句起作用,因为他仍然会受到伤害,但玩家根本不会移动。 奇怪的是,如果我将 addForce 放在其他地方(比如在 update() 方法中),它将起作用,但在这种情况下不起作用。

一些帮助将不胜感激

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            TakeDamage(-20, 21);
            theRB.AddForce((collision.transform.position - transform.position).normalized * 100, ForceMode2D.Impulse);
        }
    }

这是刚体的样子,如果有帮助的话:

最佳答案

嘿,我认为这里的问题在于您对

的使用
(collision.transform.position - transform.position)

我会改为使用碰撞的接触点计算方向并将其保存在向量中。然后将该向量归一化并乘以 -1 以向相反方向发射玩家。下面是一些示例代码:

Vector2 dir = collision.contacts[0].point - transform.position;
     // Flip the vector and normalize
     dir = -dir.normalized;
     // Apply Force
     theRB.AddForce(dir * 100, ForceMode2D.Impulse);

关于c# - Addforce 不会击退我的玩家角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854148/

相关文章:

c# - CaSTLe Nvelocity - 入门

c# - 在我重新启动游戏之前,streamWriter 不会应用更改

c# - 在游戏对象上运行一次脚本

c# 在自定义属性中执行代码

c# - 企业应用本地化

c# - 如何在 C# 的 Unity3D 中从 Steamworks API 获取 steamID?

c# - 当一个物体经过另一个物体时如何发出声音?

c# - 输入只存储两个值?

c# - 禁用 ReactiveUI ItemsView.ItemTemplate Hook

c# - 在 .ashx 页面中使用文件的相对路径