C# 对象正在移动到世界向量

C# 对象正在移动到世界向量,c#,unity3d,C#,Unity3d,我有一个playerAttack()方法,当玩家点击鼠标左键时,该方法会被激活(由于物理原因,情况处于FixedUpdate())。该方法有一个光线投射,可以将玩家前方的敌人推开。问题是,由于矢量3,敌人被推向了世界的方向。我尝试使用AddRelativeForce()而不是AddForce(),但它仍然朝着世界的方向发展。代码如下: public void playerAttack() { RaycastHit hit; if (Physics.Raycast(player.t

我有一个
playerAttack()
方法,当玩家点击鼠标左键时,该方法会被激活(由于物理原因,情况处于
FixedUpdate()
)。该方法有一个光线投射,可以将玩家前方的敌人推开。问题是,由于矢量3,敌人被推向了世界的方向。我尝试使用
AddRelativeForce()
而不是
AddForce()
,但它仍然朝着世界的方向发展。代码如下:

public void playerAttack()
{
    RaycastHit hit;
    if (Physics.Raycast(player.transform.position, player.transform.forward, out hit, range))
    {
        if (hit.rigidbody != null && hit.transform.tag == "Enemy")
        {
            hit.rigidbody.AddForce(hit.rigidbody.transform.forward * weaponPush);
        }
    }

}

如果要将刚体推离播放器,则必须使用
player.transform.forward
向量,而不是刚体的向量:

public void playerAttack()
{
    RaycastHit hit;
    if (Physics.Raycast(player.transform.position, player.transform.forward, out hit, range))
    {
        if (hit.rigidbody != null && hit.transform.tag == "Enemy")
        {
            hit.rigidbody.AddForce(player.transform.forward * weaponPush);
        }
    }    
}

您应该看看
InverseTransformDirection
Vector3 dir=hit.transform.InverseTransformDirection(0,0,10)
hit.rigidbody.AddForce(dir*weaponPush)未更改任何内容。它仍然向世界方向飞行。你确定刚体的方向正确吗?当使用光线投射时,请在SceneView中检查其前向向量。如果在运行时其前向向量也是(0,0,1)(这是我在上一个问题中想知道的),并且由于您冻结了其旋转,那么对象将始终根据世界坐标系中的世界移动。然后,你为什么不使用玩家的前向向量呢<代码>hit.rigidbody.AddForce(player.transform.forward*weaponPush)您从未指定要沿播放器的前向向量推进