检测光线投射来自哪个角度
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);
}
}
问题是这样的:我想改变物体下落的方向,以适应光线投射(在本例中为子弹)的来源。到目前为止我的代码是这样的:
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);
}
}