- Home /
destroying gameobject from other script
I have two gameobjects (Bug and Hand) in a 2d game. One of them(Hand) has a code that checks for a specific input and if the input happens another method checks for collision with Bug. If there is collision then I would like Bug to be destroyed. My problem is that I don't know how to destroy gameobject Bug from the script associated with Hand. I added the section code from Hand and marked where I would like the destroying to happen. Any help would be most appreciated. (just note that I cannot move method Attack as it has impact on the handAttack class further on in the code)
public class handAttack : MonoBehaviour {
float timeframe = 0;
bool chkinput=false;
bool IsOverlap = false;
public void checkColisionForAttack(){
Collider2D[] colliders = Physics2D.OverlapCircleAll (transform.position, 0.8f);
if (colliders.Length > 0) {
foreach (var c in colliders) {
if (c.name == "Bug_Sheet_0") {
IsOverlap = true;
print ("we have collision");
print (colliders);
// and this is where I would like the gameobject Bug to be destroyed
}
}
} else {
IsOverlap = false;
}
}
public void Attack (){
if (Input.GetKeyDown (KeyCode.F)) {
chkinput = true;
}
if (chkinput) {
timeframe += 1 * Time.deltaTime;
if (Input.GetKeyDown (KeyCode.G)) {
checkColisionForAttack();
timeframe = 0;
chkinput = false;
}
if (timeframe > 1) {
timeframe = 0;
chkinput = false;
}
}
}
U could make it so the hand has a tag and if the bug touches a tag it will be destroyes... or click to spawn the tagged item or make the second hand that comes down have a tag.
Answer by TrentBost · May 15, 2015 at 10:57 PM
To Destroy
the object, you can use: Destroy( c.gameObject );
using UnityEngine;
using System.Collections;
public class handAttack : MonoBehaviour {
float timeframe = 0;
bool chkinput = false;
bool IsOverlap = false;
/////////////////////////////
// Check Collision For Attack
public void checkColisionForAttack() {
Collider2D[] colliders = Physics2D.OverlapCircleAll( transform.position, 0.8f );
if( colliders.Length > 0 ) {
foreach( var c in colliders ) {
if( c.name == "Bug_Sheet_0" ) {
IsOverlap = true;
print( "we have collision" );
print( colliders );
//// DESTROY: Bug GameObject
Destroy( c.gameObject );
};
};
} else {
IsOverlap = false;
};
}
/////////
// Attack
public void Attack() {
if( Input.GetKeyDown( KeyCode.F ) ) {
chkinput = true;
};
if( chkinput ) {
timeframe += 1 * Time.deltaTime;
if( Input.GetKeyDown( KeyCode.G ) ) {
checkColisionForAttack();
timeframe = 0;
chkinput = false;
};
if( timeframe > 1 ) {
timeframe = 0;
chkinput = false;
};
};
}
}
There are built-in functions that can do collision checks for you.
It would be worth-while to check into OnCollisionEnter2D and OnTriggerEnter2D
Code for that might look something like:
[...]
//////////////////////
// ON Trigger Enter 2D
void OnTriggerEnter2D( Collider2D col ) {
switch( col.name ) {
case "Bug_Sheet_0":
Destroy( col.gameObject );
break;
default: break;
};
}
[...]
Your answer
Follow this Question
Related Questions
Destroy object on touch of object with specific class 3 Answers
Simple on Collision Help (C#) 2 Answers
[c#]collision script not working 1 Answer
Collision on specific Frames 1 Answer