- Home /
Question by
IgotbulletZ · Jul 04, 2019 at 08:08 PM ·
objectsdistance check
A problem with shooting at closest game object
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class TurretScript : MonoBehaviour
{
public bool isReal = false;
private bool isCoroutineExecuting = false;
public GameObject missile;
public Transform missileSpawn;
GameObject playerObject;
GameObject closestObject;
public Transform spawnPos;
public float distanceToFollow = Mathf.Infinity;
public void StartCoroutines()
{
StartCoroutine("TakePower");
StartCoroutine("DoCO2");
}
public void Start()
{
playerObject = gameObject;
distanceToFollow = 20;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
IsReal = true;
}
if (IsReal)
{
FaceClosestObject();
}
}
GameObject FindClosestVisibility()
{
GameObject[] aliens;
aliens = GameObject.FindGameObjectsWithTag("Alien");
float distance = Mathf.Infinity;
Vector3 position = playerObject.transform.position;
foreach (GameObject currentObject in aliens)
{
Vector3 distanceCheck = currentObject.transform.position - transform.position;
float currentDistance = distanceCheck.sqrMagnitude;
if (currentDistance < distance)
{
closestObject = currentObject;
distance = currentDistance;
}
}
return closestObject;
}
public void FaceClosestObject()
{
FindClosestVisibility();
float finalDistanceCheck = Vector3.Distance(playerObject.transform.position, closestObject.transform.position);
if (finalDistanceCheck <= distanceToFollow)
{
transform.LookAt(closestObject.transform);
StartCoroutine(StartShooting(2.5f));
if(closestObject != null)
{
closestObject = null;
}
}
closestObject = null;
}
public bool IsReal
{
get { return isReal; }
set
{
if (value == isReal)
return;
isReal = value;
if (isReal)
{
StartCoroutines();
TakeCost();
}
}
}
IEnumerator StartShooting(float time)
{
if (isCoroutineExecuting)
yield break;
isCoroutineExecuting = true;
Instantiate(missile, spawnPos.position, Quaternion.identity);
yield return new WaitForSeconds(time);
isCoroutineExecuting = false;
}
IEnumerator TakePower()
{
for (; ; )
{
GameObject ResourceManage = GameObject.Find("ResourceManage");
Resources resourcesScript = ResourceManage.GetComponent<Resources>();
resourcesScript.power -= 1f;
yield return new WaitForSeconds(2f);
}
}
IEnumerator FaceObjectCor()
{
FaceClosestObject();
yield return new WaitForSeconds(0.05f);
}
IEnumerator DoCO2()
{
for (; ; )
{
GameObject ResourceManage = GameObject.Find("ResourceManage");
Resources resourcesScript = ResourceManage.GetComponent<Resources>();
resourcesScript.CO2 += 1f;
yield return new WaitForSeconds(10f);
}
}
void TakeCost()
{
GameObject ResourceManage = GameObject.Find("ResourceManage");
Resources resourcesScript = ResourceManage.GetComponent<Resources>();
resourcesScript.steel -= 500;
}
void OnMouseOver()
{
if (Input.GetKey(KeyCode.B))
{
DestroyBuilding();
}
}
void DestroyBuilding()
{
Destroy(gameObject);
GameObject ResourceManage = GameObject.Find("ResourceManage");
Resources resourcesScript = ResourceManage.GetComponent<Resources>();
resourcesScript.steel += 500;
}
}
So, I have this script on my turret that successfully finds the closest enemy and shoots at it, but even when the enemy dies (the alien), the turret keeps shooting at the alien's spawnpoint. I checked the actual spawnpoint object for the "Alien" tag, but it is untagged. I don't know what's causing this and it's really annoying, so if anyone could help me, you would literally save my life. Thank you!
Comment