- Home /
Variable target in 'Targetting system' error.
Hi. I've been following the tutorials of BergZergArcade (Look him up on Youtube, he's awesome', but i came across this error:
UnassignedReferenceException: The variable target of 'PlayerAttack' has not been assigned. You probably need to assign the target variable of the PlayerAttack script in the inspector. PlayerAttack.Attack () (at Assets/Scripts/PlayerAttack.cs:33) PlayerAttack.Update () (at Assets/Scripts/PlayerAttack.cs:25)
My script:
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class Targetting : MonoBehaviour { public List targets; public Transform selectedTarget;
private Transform myTransform;
// Use this for initialization
void Start () {
targets = new List();
selectedTarget = null;
myTransform = transform;
AddAllEneies();
}
public void AddAllEneies()
{
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
foreach(GameObject enemy in go)
AddTarget(enemy.transform);
}
public void AddTarget(Transform enemy)
{
targets.Add(enemy);
}
private void SortTargetByDistance()
{
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)
{
SortTargetByDistance();
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.green;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Tab))
{
TargetEnemy();
}
}
}
So basically, i have a script called 'PlayerAttack' attached to my player. But i have 3 evil cubes, so how do i select more than one to be attached to the PlayerAttack script so i can attack all three. And last but not least, what if i get for example over 100 enemies, do i have to attach them all to the script? I hope some of you can help me out. Thanks alot!
Answer by prototype7 · Jan 07, 2013 at 08:08 AM
Try to fix your error first
public class Targetting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
private Transform myTransform;
void Start () {
targets = new List<Transform>();
selectedTarget = null;
myTransform = transform;
AddAllEnemies();
}
}