- Home /
Question by
SterlingStudios · Aug 16, 2014 at 02:42 PM ·
javascriptfindclosestlooting
Finding Closest Object is Destroy Both
Hi. I have made a looting script that works great until there is 2 pouches out. It destroys both instead of one. I just want it to destroy the closest one. Here is the code:
#pragma strict
var exp : GameObject;
var lootBack : GameObject;
var gold : GameObject;
var destroy : boolean;
var pouches : GameObject[];
var theString : String;
var theString2 : String;
var goldGUI : GUIText;
var expGUI : GUIText;
var gold2 : int;
var exp2 : int;
var goldShower : GUIText;
var expShower : GUIText;
var goldIMG : GameObject;
var expIMG : GameObject;
var player : Transform;
function Start () {
lootBack = GameObject.Find("LootPouchHolder");
exp = GameObject.Find("exp");
gold = GameObject.Find("gold");
pouches = GameObject.FindGameObjectsWithTag("Pouch");
player = GameObject.FindWithTag("Player").transform;
}
function FixedUpdate () {
theString = goldGUI.text;
gold2 = int.Parse(theString);
theString2 = expGUI.text;
exp2 = int.Parse(theString2);
}
function OnMouseEnter () {
guiText.color = Color.red;
}
function OnMouseExit () {
guiText.color = Color.blue;
}
function OnMouseDown () {
lootBack.guiTexture.enabled = false;
exp.guiText.enabled = false;
gold.guiText.enabled = false;
guiText.enabled = false;
goldIMG.guiTexture.enabled = false;
expIMG.guiTexture.enabled = false;
FindClosestEnemy();
goldShower.SendMessage("GiveGold", gold2, SendMessageOptions.DontRequireReceiver);
expShower.SendMessage("GiveExp", exp2, SendMessageOptions.DontRequireReceiver);
}
function FindClosestEnemy () : GameObject {
//Find all game objects with tag Enemy
var gos : GameObject[];
gos = GameObject.FindGameObjectsWithTag("Pouch");
var closest : GameObject;
var distance = Mathf.Infinity;
var position2 = GameObject.Find("Player").transform.position;
// Iterate through them and find the closest one
for (var go : GameObject in gos) {
var diff = (go.transform.position - position2);
var curDistance = diff.sqrMagnitude;
if (curDistance <= distance) {
closest = go;
Destroy(closest.gameObject);
distance = curDistance;
}
}
}
Comment
Best Answer
Answer by SterlingStudios · Aug 16, 2014 at 03:12 PM
Solved it. No idea what was wrong. Just kinda played with it until it worked :D. Here it is:
#pragma strict
var exp : GameObject;
var lootBack : GameObject;
var gold : GameObject;
var destroy : boolean;
var pouches : GameObject[];
var theString : String;
var theString2 : String;
var goldGUI : GUIText;
var expGUI : GUIText;
var gold2 : int;
var exp2 : int;
var goldShower : GUIText;
var expShower : GUIText;
var goldIMG : GameObject;
var expIMG : GameObject;
var player : Transform;
private var canDestroy : boolean = true;
function Start () {
lootBack = GameObject.Find("LootPouchHolder");
exp = GameObject.Find("exp");
gold = GameObject.Find("gold");
pouches = GameObject.FindGameObjectsWithTag("Pouch");
player = GameObject.FindWithTag("Player").transform;
}
function FixedUpdate () {
theString = goldGUI.text;
gold2 = int.Parse(theString);
theString2 = expGUI.text;
exp2 = int.Parse(theString2);
}
function OnMouseEnter () {
guiText.color = Color.red;
}
function OnMouseExit () {
guiText.color = Color.blue;
}
function OnMouseDown () {
lootBack.guiTexture.enabled = false;
exp.guiText.enabled = false;
gold.guiText.enabled = false;
guiText.enabled = false;
goldIMG.guiTexture.enabled = false;
expIMG.guiTexture.enabled = false;
FindClosestEnemy();
goldShower.SendMessage("GiveGold", gold2, SendMessageOptions.DontRequireReceiver);
expShower.SendMessage("GiveExp", exp2, SendMessageOptions.DontRequireReceiver);
}
function FindClosestEnemy () : GameObject {
//Find all game objects with tag Enemy
var gos : GameObject[];
gos = GameObject.FindGameObjectsWithTag("Pouch");
var closest : GameObject;
var distance = 5;
var position2 = GameObject.Find("Player").transform.position;
// Iterate through them and find the closest one
for (var go : GameObject in gos) {
var diff = (go.transform.position - position2);
var curDistance = diff.sqrMagnitude;
if (curDistance <= distance && canDestroy == true) {
closest = go;
Destroy(closest.gameObject);
distance = curDistance;
}
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613160735im_/https://answers.unity.com/themes/thub/images/avi.jpg)