检测光线投射来自哪个角度

Detect at which angle raycast is coming from

问题是这样的:我想改变物体下落的方向,以适应光线投射(在本例中为子弹)的来源。到目前为止我的代码是这样的:

public class Target: MonoBehaviour
{
    public float health = 20f;
    public Rigidbody rb;
    bool dead = false;
    
    public void TakeDamage(float damage)
    {
        health -= damage;
        if (health <= 0f)
        {
            Die();
        }
    }

    void Die()
    {
        if (dead == false)
        {
            dead = true;
            rb.AddForce(20, 0, 0);
        }

    }
}

rb.AddForce 需要旋转,以适应光线投射的来源。

更新

if (dead == false)
        {
            dead = true;
            rb.AddForce(rb.position - shooter.position);
        }

这解决了问题,我还添加了射手变换

假设我理解了你的问题(SO 的规则还不允许我要求澄清,我只能 post 硬性回答),你可以修改你的 TakeDamage() 函数,让它接受一个射线。然后,从你实际发射射线的任何地方(我猜是你的枪或玩家脚本),只需将它传递给 TakeDamage()。

需要明确的是,这会增加射线方向的力,因此您的目标将被推向子弹前进的方向。您可能正在寻找更复杂的行为。如果您希望目标根据子弹击中的位置做出逼真的反应,请查看 AddForceAtPostion,这将使您既可以推动目标,也可以逼真地旋转它。

public void TakeDamage(float damage, Ray rc)
{
    health -= damage;
    if (health <= 0f)
    {
        Die(rc);
    }
}

void Die(Ray rc)
{
    if (dead == false)
    {
        dead = true;
        rb.AddForce(rc.direction);
    }

}