【问题标题】:Unity2D: Pushing Player away on collision with enemyUnity2D:在与敌人碰撞时将玩家推开
【发布时间】:2023-03-21 00:36:01
【问题描述】:

我正在尝试在我的游戏中添加一个脚本,以便每当玩家与敌人发生碰撞时,他都会受到伤害,但也会被推向相反的方向。我已经尝试实现发布 here

的 Rigidbody2D 扩展代码

这是我的播放器脚本的一部分:

    private void OnCollisionEnter2D(Collision2D other)
    {
        var magnitude = 5000;
        if (other.gameObject.CompareTag("Monster"))
        {
            TakeDamage(25);
            GetComponent<Rigidbody2D>().AddExplosionForce(magnitude, this.transform.position, 500);
        }
    }

当我在 Unity 中运行游戏时,每当玩家与敌人发生碰撞时都会出现此错误:

Rigidbody2D.AddForce(force) assign attempt for 'Player' is not valid. Input force is { NaN, NaN }.
UnityEngine.Rigidbody2D:AddForce(Vector2, ForceMode2D)
Rigidbody2DExt:AddExplosionForce(Rigidbody2D, Single, Vector2, Single, Single, ForceMode2D) (at Assets/Scripts/Rigidbody2DExt.cs:20)
Player:OnCollisionEnter2D(Collision2D) (at Assets/Scripts/Player.cs:94)

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    欢迎来到 StackOverflow。

    我建议您尝试:

    private void OnCollisionEnter2D(Collision2D other){
    
        Vector2 impulse = new Vector2(-7, 2);
        if (other.gameObject.CompareTag("Monster")){
            TakeDamage(25);
            GetComponent<RigidBody2D>().AddForce(impulse, ForceMode2D.Impulse);
        }
    
    }
    

    您还必须找到一种方法来获得所需的方向来推动玩家。例如,如果您从右侧接近敌人,您可能希望被推到左侧。在我的例子中,你会被一些向上的冲动推到左边。如果您还有问题,请告诉我:)

    参考here

    【讨论】:

    • 感谢您的快速回复。我刚刚将它添加到我的脚本中,我没有收到任何错误,但是当玩家与怪物碰撞时没有任何反应。我尝试增加 Vector2 脉冲的幅度,但仍然没有效果。在玩家和怪物上,我都有一个 Rigidbody2D(未勾选 Is trigger)和一个盒子对撞机
    • 您是否经常重置播放器的速度?也许应用了脉冲,但您将速度更改为 0,0(例如,对于移动)
    • 是的...可能是这样,我在 FixedUpdate() 中有我的移动控件:float moveX = 0;浮动移动Y = 0; if (Input.GetKey(KeyCode.D)) moveX += 1; if (Input.GetKey(KeyCode.A)) moveX -= 1; if (Input.GetKey(KeyCode.W)) moveY += 1; if (Input.GetKey(KeyCode.S)) moveY -= 1; Vector2 newVelocity = new Vector2(moveX, moveY).normalized * PLAYER_SPEED;
    • 是的,我认为这就是问题所在。也许您可以在被击中时将移动延迟 0.5/0.6 秒,因此您无法使用控件。但我建议你不要重置每帧的速度,如果你不想快点,只需钳制速度值。希望它有效
    • 是的,我在 FixedUpdate() 中禁用了玩家移动,它可以工作。所以现在我只需要找到一种方法来实现运动控制而不重置速度
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多