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)代码>您从未指定要沿播放器的前向向量推进