首页 > 解决方案 > 计算施加在物体上的力以减去生命值

问题描述

我正在尝试计算从爆炸和施加的力减去相当于施加的力的生命值施加到我的 Player 对象的力

我目前正在尝试使用 OnCollisionEnter 和 collision.relativeVelocity 但我无法将 Vector 3 转换为我用于 HP 的浮点数

//Class for player stats 
public static float HP =100f;

private void OnCollisionEnter(Collision collision)
{
    Vector3 velocity = collision.relativeVelocity;
    HP = HP - velocity;
}

//Explosion force code (separate class form player stats)
    Vector3 ExplosionPosition = Bomba.transform.position;
    Collider[] colliders = Physics.OverlapSphere(ExplosionPosition, 
    radius);
    foreach (Collider hit in colliders)
    {
        Rigidbody RB = hit.GetComponent<Rigidbody>();
        if (RB != null)
        {
            RB.AddExplosionForce(power, ExplosionPosition, radius, 
            upForce, ForceMode.Impulse);
        }
    }

标签: c#unity3d

解决方案


您可以使用表示向量长度的大小将 Vector3 转换为浮点数。

private void OnCollisionEnter(Collision collision)
{
    Vector3 velocity = collision.relativeVelocity;
    HP = HP - velocity.magnitude;
}

编辑:

根据评论,您可能希望自己进行计算:

 float distance = (objPosition - explosionPosition).magnitude;
 if (distance > explosionRange){ return 0.0f; } // Out of reach        
 return 1.0f - distance / explosionRange; 

这将返回力的线性减小。如果距离为 0,则您处于爆炸状态,您将获得 1 的全部力量。随着距离越远,除法越接近 1,值越接近 0。


推荐阅读