C# 如何将光线投射与鼠标定位与等轴测相机统一对齐?
当鼠标未居中时,我很难想出如何弥补鼠标位置的偏移。统一的摄影机具有角度(30、45、0)并且是正交的。有关示例,请参见图像 我曾考虑在光线投射位置渲染十字线,但这仍然会使瞄准变得棘手 线渲染器的光线投射代码:C# 如何将光线投射与鼠标定位与等轴测相机统一对齐?,c#,unity3d,raycasting,C#,Unity3d,Raycasting,当鼠标未居中时,我很难想出如何弥补鼠标位置的偏移。统一的摄影机具有角度(30、45、0)并且是正交的。有关示例,请参见图像 我曾考虑在光线投射位置渲染十字线,但这仍然会使瞄准变得棘手 线渲染器的光线投射代码: void Shoot () { timer = 0f; gunAudio.Play (); gunLight.enabled = true; gunParticles.Stop (); gunParticles.Play ();
void Shoot ()
{
timer = 0f;
gunAudio.Play ();
gunLight.enabled = true;
gunParticles.Stop ();
gunParticles.Play ();
gunLine.enabled = true;
gunLine.SetPosition (0, transform.position);
shootRay.origin = transform.position;
shootRay.direction = transform.forward;
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
{
EnemyHealth enemyHealth = shootHit.collider.GetComponent<EnemyHealth>();
if(enemyHealth != null)
{
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
}
gunLine.SetPosition (1, shootHit.point);
}
else
{
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
}
}
void Turning()
{
Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit floorHit;
if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask))
{
Vector3 playerToMouse = new Vector3(floorHit.point.x, transform.position.y, floorHit.point.z);
transform.LookAt(playerToMouse);
}
}
这名球员似乎正对着我旋转
对于LineRenderer/Shot raycast,您没有检查是否只击中地板。所以在
else
块中
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
它将光线在给定方向上延续到“永恒”(或范围
)。
您还应该在此处将地板添加到floorMask
,这样光线也会照射到地板上
或者您可以使用以下方式组合图层值
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask | floorMask))