- Home /
Get First Object In List
I am building an tower defense. I have a list, that fills when an enemy enters the turrent's range. But how can I get the first object in the list and then assing it to be the target for the turret?
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Cannon : MonoBehaviour {
public GameObject projectile;
public float reloadTime = 1f;
public float rotateSpeed = 5f;
public float cooldown = .25f;
public GameObject muzzleEffect;
public float errorAmount = .001f;
public Transform target;
public Transform[] muzzlePositions;
public Transform turretBall;
public GameObject aimHere;
public List<GameObject> targetList = new List<GameObject>();
private float nextFireTime;
private float nextMoveTime;
private Quaternion desiredRotation;
private float aimError;
void Start() {
}
void Update (){
if(target) {
if(Time.time >= nextMoveTime) {
CalculateAimPosition(target.position);
turretBall.rotation = Quaternion.Lerp(turretBall.rotation, desiredRotation, Time.deltaTime * rotateSpeed);
}
if(Time.time >= nextFireTime) {
FireProjectile();
}
}
}
void OnTriggerEnter (Collider other){
if(other.gameObject.tag == "AimPoint") {
// nextFireTime = Time.time + (reloadTime * .5f);
// target = other.gameObject.transform;
targetList.Add(other.gameObject);
}
}
void OnTriggerExit (Collider other){
if(other.gameObject.tag == "AimPoint") {
targetList.Remove(other.gameObject);
}
}
void CalculateAimPosition (Vector3 targetPos){
//Vector3 aimPoint = new Vector3(targetPos.x + aimError, targetPos.y + aimError, targetPos.z + aimError);
Vector3 aimPoint = new Vector3(aimHere.transform.position.x, aimHere.transform.position.y, aimHere.transform.position.z);
if (aimPoint != turretBall.position) {
desiredRotation = Quaternion.LookRotation(turretBall.position - aimPoint);
}
}
void CalculateAimError (){
aimError = Random.Range(-errorAmount, errorAmount);
}
void FireProjectile (){
//audio.Play();
nextFireTime = Time.time + reloadTime;
nextMoveTime = Time.time + cooldown;
CalculateAimError();
foreach(Transform theMuzzlePos in muzzlePositions) {
Instantiate(projectile, theMuzzlePos.position, theMuzzlePos.rotation);
//Instantiate(muzzleEffect, theMuzzlePos.position, theMuzzlePos.rotation);
}
}
}
Answer by mattssonon · Oct 21, 2013 at 07:57 PM
Like an array, targetList[0]
.
@mattssonon How would you use an array to select the first object in the list? Or are you suggesting we use an array ins$$anonymous$$d of a gameobject list?
Is it possible to just select the first object from the gameobject list ins$$anonymous$$d of using an array?
A list is just a collection 'essentially an array' that contains pointers to a head and a tail node and class methods to search, sort, insert, etc.
targetList[0] is the first element in the list...
https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx
Note that a generic List<T>
is not a linked list. Internally a List is using an actual array. However arrays can't be resized. A List uses an array which is automatically replaced when it runs out of capacity. So a List is just a wrapper for a native array and allows easy adding and removing of items. There is no head or tail pointer. A List just independently tracks the number of elements stored which allows the list to use a larger array to have reserve.
Answer by Eragon1158 · Jul 20, 2017 at 09:38 PM
Don't know if this helps but Brackeys has a great tower defense game tutorial. Here is the link,
This is actually off-topic. The question was about how to get the first element in a List. This answer doesn't answer the question. It's way too general as an answer.
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Show only selected enemy's health bar 1 Answer
How do I get my enemy to attack? 0 Answers
Can anyone help with me with my attack script and enemy script? 1 Answer
Melee range AI 1 Answer