自上而下的 3D 光线投射到鼠标点
Top down 3D Raycast to Mouse Point
我正在从枪尖处的空变换中投射光线。投射是朝向右击鼠标的位置。生命值与预期相差一半,这是一个意想不到的结果。
我尝试重做 Raycasting 并查看了 Unity 文档和论坛,也许我错过了这么简单。我已经包含了我的 Fire Function 的代码。注意 "Raycaster" 是它发射的空游戏对象。
public void Fire(Vector3 point)
{
RaycastHit hit;
if(Physics.Raycast(Raycaster.transform.position, point, out hit))
{
Debug.DrawLine(Raycaster.transform.position, point, Color.green); //expected
Debug.DrawLine(Raycaster.transform.position, hit.point, Color.red); //actual
if(hit.rigidbody != null)
{
hit.rigidbody.AddForce(-hit.normal * weapon.Damage);
}
GameObject Impact = Instantiate(ImpactParticle, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(Impact, 1f);
}
}
绿色的第一个Debug.Drawline是我所期望的,但第二个Debug.Drawline是实际的。我一定是来自 Raycast 的 hit.point,但它总是半路。
问题示例,预期为绿色,实际为红色
我认为你使用了世界位置(点)。尝试将您的 point 参数转换为方向。
Vector3 dir = point - Raycaster.transform.position;
Physics.Raycast(Raycaster.transform.position, dir, out hit)
我正在从枪尖处的空变换中投射光线。投射是朝向右击鼠标的位置。生命值与预期相差一半,这是一个意想不到的结果。
我尝试重做 Raycasting 并查看了 Unity 文档和论坛,也许我错过了这么简单。我已经包含了我的 Fire Function 的代码。注意 "Raycaster" 是它发射的空游戏对象。
public void Fire(Vector3 point)
{
RaycastHit hit;
if(Physics.Raycast(Raycaster.transform.position, point, out hit))
{
Debug.DrawLine(Raycaster.transform.position, point, Color.green); //expected
Debug.DrawLine(Raycaster.transform.position, hit.point, Color.red); //actual
if(hit.rigidbody != null)
{
hit.rigidbody.AddForce(-hit.normal * weapon.Damage);
}
GameObject Impact = Instantiate(ImpactParticle, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(Impact, 1f);
}
}
绿色的第一个Debug.Drawline是我所期望的,但第二个Debug.Drawline是实际的。我一定是来自 Raycast 的 hit.point,但它总是半路。
问题示例,预期为绿色,实际为红色
我认为你使用了世界位置(点)。尝试将您的 point 参数转换为方向。
Vector3 dir = point - Raycaster.transform.position;
Physics.Raycast(Raycaster.transform.position, dir, out hit)