- Home /
Targeting problem
hi guys. i made a targeting script (c#) and a ragdoll enemy. the targeting works fine, but when i kill the enemy and the ragdoll starts, i cant target the other enemies. here's the targeting script:
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.green;
}
private void DeselectTarget()
{
selectedTarget.renderer.material.color = Color.red;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Tab))
{
TargetEnemy();
}
}
}
do u have any suggestions? many thanks.
Answer by whydoidoit · Jul 01, 2012 at 08:46 PM
You don't appear to be removing any enemies from the array - so I guess the one that is a ragdoll is the closest. Also use Linq! It makes code so much easier to read. Rewritten below:
using System.Linq;
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 () {
selectedTarget = null;
myTransform = transform;
targets = GameObject.FindGameObjectsWithTag("Enemy").Select(g=>g.transform).ToList();
}
private void TargetEnemy()
{
if(selectedTarget == null)
{
selectedTarget = targets.OrderBy(t=>Vector3.Distance(t.position, myTransform.position).FirstOrDefault();
}
else
{
int index = targets.IndexOf(selectedTarget);
if(index < targets.Count - 1)
{
index++;
}
else
{
index = 0;
}
DeselectTarget();
selectedTarget = targets[index];
}
if(selectedTarget != null)
SelectTarget();
}
private void SelectTarget()
{
selectedTarget.renderer.material.color = Color.green;
}
public void KillSelectedTarget()
{
targets.Remove(selectedTarget);
DeselectTarget();
}
private void DeselectTarget()
{
selectedTarget.renderer.material.color = Color.red;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Tab))
{
TargetEnemy();
}
}
}
didnt seem to work. i have this script attached to my player :
var deadReplacement : Transform; var aliveObject : GameObject;
function replaceWithRagdoll() { // Destroy ourselves Destroy(aliveObject);
if(Destroy)
{
Destroy(aliveObject);
}
// Replace ourselves with the dead body
if (deadReplacement)
{
var deadBody = Instantiate(deadReplacement.transform, transform.position, transform.rotation);
gameObject.Find("Bip001_Pelvis").rigidbody.AddForce(-transform.forward * 5);
}
};
its a javascript that replaces the enemy with the ragdoll. could this be messing up the target script?
Did you call the $$anonymous$$illSelectedTarget function I wrote in the code above somewhere? It should be the first thing in the replaceWithRagdoll function.
Your answer
Follow this Question
Related Questions
Targetting Script Help 1 Answer
C# AI, Enemy is flying at me when I jump. 2 Answers
How do you create a "collect" objection that corresponds with the enemy behavior in C#? 1 Answer
Distribute terrain in zones 3 Answers
Enemy Targetting Help 1 Answer