Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将光线投射与鼠标定位与等轴测相机统一对齐?_C#_Unity3d_Raycasting - Fatal编程技术网

C# 如何将光线投射与鼠标定位与等轴测相机统一对齐?

C# 如何将光线投射与鼠标定位与等轴测相机统一对齐?,c#,unity3d,raycasting,C#,Unity3d,Raycasting,当鼠标未居中时,我很难想出如何弥补鼠标位置的偏移。统一的摄影机具有角度(30、45、0)并且是正交的。有关示例,请参见图像 我曾考虑在光线投射位置渲染十字线,但这仍然会使瞄准变得棘手 线渲染器的光线投射代码: void Shoot () { timer = 0f; gunAudio.Play (); gunLight.enabled = true; gunParticles.Stop (); gunParticles.Play ();

当鼠标未居中时,我很难想出如何弥补鼠标位置的偏移。统一的摄影机具有角度(30、45、0)并且是正交的。有关示例,请参见图像

我曾考虑在光线投射位置渲染十字线,但这仍然会使瞄准变得棘手

线渲染器的光线投射代码:

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))