- Home /
Question by
firebird127 · Oct 06, 2019 at 03:32 PM ·
raycastingraycasthitmousepositionaimingdegrees
Rotate raycast towards mouse position
Hey all,
I'm having quite a bit of trouble figuring out to fire a ray in the direction of my mouse position. Currently, I'm trying to get the direction from the mouse, clamp it between some degrees (to prevent the player from looking over his head), and use current degree to rotate the direction of my firepoint. However, when I do shoot, rays fire to the right and down at the ground instead of in the direction of the mouse. Any help would be greatly appreciated :)
Below is my code:
private void Aim()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - firePoint.position;
float rotZ = Mathf.Clamp(Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg, -60, 60);
firePoint.rotation = Quaternion.Euler(0f, 0f, rotZ);
}
IEnumerator Shoot()
{
//flip shot.
Vector2 direction = Vector3.right;
////account for randomness of shot.
direction.y += Random.Range(-spreadFactor, spreadFactor);
RaycastHit2D hit = Physics2D.Raycast(new Vector2(firePoint.position.x, firePoint.position.y), direction);
//TODO play gunshot
//render bullet trail.
lineRenderer.enabled = true;
if (hit && hit.collider.gameObject.layer != 8)
{
lineRenderer.SetPosition(0, firePoint.transform.position);
lineRenderer.SetPosition(1, hit.point);
//spawn impact.
Instantiate(impact, hit.point, Quaternion.identity);
//enemy damage
if (hit.collider.GetComponent<EnemyHandler>())
{
EnemyHandler enemy = hit.collider.GetComponent<EnemyHandler>();
enemy.Damage();
}
}
else
{
lineRenderer.SetPosition(0, firePoint.transform.position);
lineRenderer.SetPosition(1, firePoint.position + (Vector3.right * 10));
}
yield return 0;
lineRenderer.enabled = false;
}
Comment