- Home /
Detect if Transform is destroyed
I'm making a script for a turret that aims at the object and fires at it when inrange = true, but the gun just keeps firing after the object is destroyed.
AIM SCRIPT
var target : Transform; //the enemy's target
var tarpos : Vector3;
var moveSpeed = 50; //move speed
var rotationSpeed = 3; //speed of turning
var thispos : Vector3;
var inrange = false;
var myTransform : Transform; //current transform data of this enemy
function Awake()
{
myTransform = transform; //cache transform data for easy access/preformance
}
function Start()
{
target = GameObject.FindWithTag("EnemyLand").transform; //target the player
}
function Update () {
if(target == null){
print("working");
inrange = false;
}
tarpos = target.position;
thispos = transform.position;
if(Vector3.Distance (thispos, tarpos) < 25){
inrange = true;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
if(Vector3.Distance (thispos, tarpos) > 25){
inrange = false;
}
}
SHOOT SCRIPT
var bullet : Transform;
var reloadTime = 0.2;
var LTAcube : GameObject;
var canfire = true;
var muzzle : Transform;
var on : boolean;
function Update () {
on = LTAcube.GetComponent("LTAI").inrange;
if(on == true){
Debug.Log("On Is True");
if(canfire == true){
Debug.Log("CanFire Is True");
Fire();
Debug.Log("Sending Fire");
}
}
}
function Fire () {
Instantiate(muzzle, transform.position, transform.rotation);
Instantiate(bullet, transform.position, transform.rotation);
Reload();
Debug.Log("Sending Reload");
canfire = false;
if(on == false){
canfire = false;
}
}
function Reload () {
yield WaitForSeconds (reloadTime);
Fire();
}
You have a target i see. You can get gameObject from transport and therefore any script. So obviously one of the scipts on your target regulates weather it is dead or alive. This script could change the tag or dispatch message or event.
Answer by Cbjfan1 · Jul 31, 2013 at 06:18 PM
I got it to work :D
AIM SCRIPT
var target : Transform; //the enemy's target
var tarpos : Vector3;
var moveSpeed = 50; //move speed
var rotationSpeed = 3; //speed of turning
var thispos : Vector3;
var inrange = false;
var myTransform : Transform; //current transform data of this enemy
function Awake()
{
myTransform = transform; //cache transform data for easy access/preformance
}
function Start()
{
InvokeRepeating ("Spawn", 1, 1);
}
function Spawn() {
target = GameObject.FindWithTag("EnemyLand").transform; //target the player
}
function Update () {
if(target.GetComponent("health").heal <= 0){
Debug.Log("DISABLING");
target = null;
inrange = false;
}
tarpos = target.position;
thispos = transform.position;
if(Vector3.Distance (thispos, tarpos) < 25){
inrange = true;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
if(Vector3.Distance (thispos, tarpos) > 25){
inrange = false;
}
}
SHOOT SCRIPT
var bullet : Transform;
var reloadTime = 0.2;
var LTAcube : GameObject;
var muzzle : Transform;
var on : boolean;
function Start()
{
InvokeRepeating ("Spawn", 1, 1);
}
function Spawn() {
on = LTAcube.GetComponent("LTAI").inrange;
Fire();
}
function Fire () {
if(on == true){
Instantiate(muzzle, transform.position, transform.rotation);
Instantiate(bullet, transform.position, transform.rotation);
Reload();
Debug.Log("Sending Reload");
}
if(on == false){
Lock();
}
}
function Reload () {
yield WaitForSeconds (reloadTime);
Fire();
}
function Lock () {
if(on == true){
Fire();
}
}
Answer by bubzy · Jul 31, 2013 at 05:03 PM
looks like you made an infinite loop there buddy
Fire()
calls
Reload()
and then
Reload()
calls
Fire()
and then....... well, you get it.
also as a good practice tip (and a timesaver)
if(canfire == true)
can be written as
if (canfire)
and for a false value
if (canfire == false)
can be written as
if(!canfire)
I'm trying to get fire to detect if on is false so it can send it back to Update, but I'm not sure if update is the right function I'm ai$$anonymous$$g for :/
Your answer
Follow this Question
Related Questions
Destroyed Object Error 2 Answers
CAN SOMEONE FINALLY HELP ME! 3 Answers
Argument cannot be Null??, 2 Answers
Null reference exception error in Unity, Please Help! 1 Answer
NullReferenceException Error 6 Answers