- Home /
Enemy Select
Im having a real tough time programming this script basically what im trying to do is program my game so that i can select enemies with my mouse but all it does when i click the mouse is cycle through my enemies no matter where i click, i posted this many times and all ive can up with was dead ends i am very new to unity and programming so if you can alter or re write this script in c# it would be greatly appreciated thanks
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Targeting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
private Transform myTransform;
// Use this for initialization
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.blue;
selectedTarget = null;
}
// Update is called once per frame
void Update(){
//Only search if clicked
if( Input.GetMouseButtonDown(0) ){
TargetEnemy();
}
}
}
And I am having a really tough time reading your code! Format your code please. Go to edit, highlight your code by selecting it and press the '101010' button at the top which is fifth from the left.
hey, could any of you tell me how to use the selectedtarget? Like in "Public GameObject " something? :)
Answer by aldonaletto · Mar 22, 2012 at 04:36 AM
This is an interesting and smart script, but its purpose is exactly to cycle through the enemies by distance order. To select only the clicked enemy, you should use a completely different approach: do a raycast from the mouse pointer, and if an enemy is hit, deselect the previous one and select the clicked enemy.
using UnityEngine; using System.Collections; using System.Collections.Generic; public class Targeting : MonoBehaviour {
public Transform selectedTarget;
void Update(){ if (Input.GetMouseButtonDown(0)){ // when button clicked... RaycastHit hit; // cast a ray from mouse pointer: Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // if enemy hit... if (Physics.Raycast(ray, out hit) && hit.transform.CompareTag("Enemy")){ DeselectTarget(); // deselect previous target (if any)... selectedTarget = hit.transform; // set the new one... SelectTarget(); // and select it } } }
private void SelectTarget(){ selectedTarget.renderer.material.color = Color.red; PlayerAttack pa = (PlayerAttack)GetComponent("PlayerAttack"); pa.target = selectedTarget.gameObject; }
private void DeselectTarget(){ if (selectedTarget){ // if any guy selected, deselect it selectedTarget.renderer.material.color = Color.blue; selectedTarget = null; } } } NOTE: This is untested C# code from a JS guy - let me know if you have any error.
This works perfect thanks, been working on this for 2 days now, i actually raged a little last night and gave up... I just missed the part in DeselectTarget - if (selectedTarget) ... i still can't work out why it now only allows 1 target to be selected tho, but hey it works!!
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Targeting by clicking on them 2 Answers
Selecting enemies with mouse button 0 Answers
Reset button 1 Answer
How can i disable left button mouse, when i click on GameObject? 2 Answers