Hey everyone,
So let me start out by saying what my goal is for this script. What I want to be able to do is:
1. Look for objects tagged as an 'Enemy'
2. Find the closest object tagged as an 'Enemy'
3. Draw a GUI Texture ontop of it when the player presses Tab
4. Draw the same GUI Texture on the 2nd closest object if Tab is pressed again
5. Draw the same GUI Texture on the 3rd and so on...
I have steps 1 - 3 working, but I can’t seem to be able to sort the game objects correctly. Here’s an example of my code
// the current target
private var target : Transform;
var nearestObj : Transform = null;
function Update() {
if (Input.GetKeyDown("tab")) {
target = GetNearestTaggedObject();
nearestObj.GetComponent("TargetSelectingIcon").DrawSelect();
}
if (Input.GetKeyDown("return")){
target = GetNearestTaggedObject();
nearestObj.GetComponent("TargetSelectingIcon").DrawLock();
}
if (Input.GetKeyDown("escape")){
target = GetNearestTaggedObject();
nearestObj.GetComponent("TargetSelectingIcon").DrawNone();
}
}
function GetNearestTaggedObject() : Transform {
// and finally the actual process for finding the nearest object:
var nearestDistanceSqr = Mathf.Infinity;
var taggedGameObjects = GameObject.FindGameObjectsWithTag("Enemy");
// loop through each tagged object, remembering nearest one found
for (var obj : GameObject in taggedGameObjects) {
var objectPos = obj.transform.position;
var distanceSqr = (objectPos - transform.position).sqrMagnitude;
var storeValue = new Array();
storeValue[taggedGameObjects.length] = distanceSqr;
storeValue.Sort(sortScore);
print(storeValue[taggedGameObjects.length]);
if (storeValue[taggedGameObjects.length] < nearestDistanceSqr) {
nearestObj = obj.transform;
nearestDistanceSqr = storeValue[taggedGameObjects.length];
}
}
}
function sortScore (a, b){
//sorts an array numerically ascending
return (a - b);
}