当鼠标不居中时,我很难弄清楚如何弥补鼠标位置的偏移量。在统一相机是角(30,45,0),是正交的。参见图像作为一个例子。
我想在光线投射的位置画一个十字线,但这仍然会使目标变得棘手。
用于linerenderer代码的Raycast:
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);
}
}
用于旋转播放器的Raycast:
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);
}
}
发布于 2019-11-14 15:05:56
在我看来,这位球员似乎是被轮回的。
对于LineRenderer /射击射线广播来说,你并不是在检查是否撞到了地板上的敌人。所以在else
块中,您可以这样做
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
在给定的方向上将光线延续到“永恒”(或range
)。你也应该在这里添加地板到floorMask
,所以你的光线也击中地板。
或者,您可以使用以下方法组合图层值
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask | floorMask))
https://stackoverflow.com/questions/58859694
复制相似问题