- Home /
Targetting Script Help
Hi Guys :D I Have a question. Is it Possible to Change this script so I "Target" a Enemy when i click on it :). I need Just Help with it to. :) So Here is the Script:
public class Targetting : MonoBehaviour { public List targets; public Transform selectedTarget;
 private Transform myTransform;
     
 void Start () {
     targets = new List<Transform>();
     selectedTarget = null;
     myTransform = transform;
     
     AddAllEnemies();
 }
 
 public void AddAllEnemies() {
     GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
     
     foreach(GameObject enemy in go)
         AddTarget(enemy.transform);
 }
 
 public void AddTarget(Transform enemy) {
     targets.Add(enemy);
 }
 
 
 private void SortTargetsByDistance() {
     targets.Sort(delegate(Transform t1, Transform t2) {
             return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
             });
 }
 
 private void TargetEnemy() {
     if(selectedTarget == null) {
         SortTargetsByDistance();
         selectedTarget = targets[0];
     }
     else {
         int index = targets.IndexOf(selectedTarget);
         
         if(index < targets.Count - 1) {
             index++;
         }
         else {
             index = 0;
         }
         DeselectTarget();
         selectedTarget = targets[index];
     }
     SelectTarget();
 }
 
 private void SelectTarget() {
     selectedTarget.renderer.material.color = Color.red;
     
     PlayerAttack pa = (PlayerAttack)GetComponent("PlayerAttack");
     
     pa.target = selectedTarget.gameObject;
 }
 
 private void DeselectTarget() {
     selectedTarget.renderer.material.color = Color.white;
     selectedTarget = null;
 }
 
 // Update is called once per frame
 void Update () {
     if(Input.GetKeyDown(KeyCode.Tab)) {
         TargetEnemy();
     }
 }
}
Any Ideas to Start or Help :)?
Answer by Kleptomaniac · Apr 21, 2012 at 02:43 PM
Just use a raycast from your cursor coordinates. Like so:
 void Update () {
     if(Input.GetButtonDown("Fire1")) {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
         RaycastHit hit;    
         if(Physics.Raycast(ray, hit, 100)) {
             if (hit.collider.gameObject.tag == "enemy") {
                 selectedTarget = hit.collider.gameObject;
             }
         }
     }
 }
You may need to fit it into your code a bit better as you see fit.
Hope that helps, Klep
Hahaha! Again, make sure to tick. Glad I could help! :D
But when i try. I get These Errors:
1.Assets/Scripts/Targetting.cs(75,32): error CS0165: Use of unassigned local variable hit' 2. Assets/Scripts/Targetting.cs(75,19): error CS1502: The best overloaded method match for UnityEngine.Physics.Raycast(UnityEngine.Ray, out UnityEngine.RaycastHit, float)' has some invalid arguments
- Assets/Scripts/Targetting.cs(75,19): error CS1620: Argument - #2' is missingout' modifier
Have you got any Ideas? :)
Yeah, sorry, add the out modifier to your Physics.Raycast line like so:
 if(Physics.Raycast(ray, out hit, 100)) {
Remember to accept my answer with the tick!
Thanks :) You are a GREAT GREAT GREAT Teacher/Fixer or whatever :)
Your answer
 
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Script bug (gameObject.tag) 0 Answers
Targeting problem 1 Answer
Distribute terrain in zones 3 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                