Question by
DannyCampi · Apr 20, 2017 at 09:28 PM ·
scripting problemenemytargetenemiestargetting
Player target enemies automatically
Hi I have this Script. I have 3 enemies but if 2 of them attack me I only can attack 1 of them at a time. I want not to target only one, but target any enemy who reach me without pressing a button. This is the code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Targetting : 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.GetComponent<Renderer>().material.color = Color.red;
PlayerAttack pa = (PlayerAttack)GetComponent ("PlayerAttack");
pa.target = selectedTarget.gameObject;
}
private void DeselectTarget()
{
selectedTarget.GetComponent<Renderer>().material.color = Color.white;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.Tab))
{
TargetEnemy ();
}
}
}
I have another script named Player Attack in which the target is defined but I cant put all three enemies as a target.
public class PlayerAttack : MonoBehaviour {
public GameObject target;
public float attackTimer;
public float coolDown;
// Use this for initialization
void Start () {
attackTimer = 0;
coolDown = 0.0f;
}
// Update is called once per frame
void Update () {
if (attackTimer > 0)
attackTimer -= Time.deltaTime;
if (attackTimer < 0)
attackTimer = 0;
if(Input.GetKeyUp(KeyCode.Mouse0)){
if (attackTimer == 0) {
Attack ();
attackTimer = coolDown;
}
}
}
private void Attack() {
float distance = Vector3.Distance (target.transform.position, transform.position);
Vector3 dir = (target.transform.position - transform.position).normalized;
float direction = Vector3.Dot (dir, transform.forward);
Debug.Log (direction);
if (distance < 8) {
if (direction > 0.5f) {
EnemyHealth eh = (EnemyHealth)target.GetComponent ("EnemyHealth");
eh.AddjustCurrentHealth (-10);
}
}
}
}
please Help with the scripts!!
Comment
Your answer
Follow this Question
Related Questions
Unity2D Need Help in Multiple Enemies Shooting Script 0 Answers
LookAt() not working? 2 Answers
Score counter not working properly. 1 Answer
enemy look at GameObject player? unity ver. 5.2 C# 0 Answers