- Home /
Question by
rodzyn3375 · Feb 06 at 09:52 AM ·
shootingfov
hello can someone help me combine this two scripts ?
i need to shoot if player is in the range and i dont know how to do this :(
this is the shooting script:
public float minDamage;
public float maxDamage;
public float cooldown;
public Transform firePoint;
public float bulletSpeed = 50;
public GameObject projectile;
private GameObject player;
// Start is called before the first frame update
void Start()
{
StartCoroutine(ShootPlayer());
player = FindObjectOfType<PlayerMovement>().gameObject;
}
IEnumerator ShootPlayer()
{
yield return new WaitForSeconds(cooldown);
if (player != null)
{
GameObject bulletClone = Instantiate(projectile, transform.position, Quaternion.identity);
Vector2 myPos = transform.position;
Vector2 TargetPos = player.transform.position;
Vector2 direction = (TargetPos - myPos).normalized;
bulletClone.GetComponent<Rigidbody2D>().velocity = direction * bulletSpeed;
bulletClone.GetComponent<Enemytest>().damage = Random.Range(minDamage, maxDamage);
StartCoroutine(ShootPlayer());
FindObjectOfType<AudioManager>().Play("gs");
}
}
and this is the FOV script:
public float radius;
[Range(0, 360)]
public float angle;
public GameObject playerRef;
public LayerMask targetLayer;
public LayerMask obstructionLayer;
public bool canSeePlayer { get; private set; }
private void Start()
{
playerRef = GameObject.FindGameObjectWithTag("Player");
StartCoroutine(FOVRoutine());
}
private IEnumerator FOVRoutine()
{
WaitForSeconds wait = new WaitForSeconds(0.2f);
while (true)
{
yield return wait;
FOV();
}
}
private void FOV()
{
Collider2D[] rangeChecks = Physics2D.OverlapCircleAll(transform.position, radius, targetLayer);
if (rangeChecks.Length > 0)
{
Transform target = rangeChecks[0].transform;
Vector2 directionToTarget = (target.position - transform.position).normalized;
if (Vector2.Angle(transform.up, directionToTarget) < angle / 2)
{
float distanceToTarget = Vector2.Distance(transform.position, target.position);
if (!Physics2D.Raycast(transform.position, directionToTarget, distanceToTarget, obstructionLayer))
canSeePlayer = true;
else
canSeePlayer = false;
}
else
canSeePlayer = false;
}
else if (canSeePlayer)
canSeePlayer = false;
}
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
UnityEditor.Handles.DrawWireDisc(transform.position, Vector3.forward, radius);
Vector3 angle01 = DirectionFromAngle(-transform.eulerAngles.z, -angle / 2);
Vector3 angle02 = DirectionFromAngle(-transform.eulerAngles.z, angle / 2);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(transform.position, transform.position + angle01 * radius);
Gizmos.DrawLine(transform.position, transform.position + angle02 * radius);
if (canSeePlayer)
{
Gizmos.color = Color.green;
Gizmos.DrawLine(transform.position,playerRef.transform.position);
}
}
private Vector2 DirectionFromAngle(float eulerY, float angleInDegrees)
{
angleInDegrees += eulerY;
return new Vector2(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
}
thanks in advance
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613052641im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Field of view not working correctly, firing from behind 0 Answers
How To Disable/Enable Function 2 Answers
what is the wrong,making shoot system? 2 Answers
NEED HELP WITH RAYCAST SHOOTING !!! 1 Answer