Chcę zniszczyć instancję obiektu, gdy znajduje się on w obrębie określonego okręgu. Kod jest w następujący sposób:Niszczenie klonów niszczy wszystkie klony
Collider2D[] overlap = Physics2D.OverlapCircleAll(
ball.transform.position,
(ball.renderer.bounds.size.x)/2);
if (overlap.Length>=1)
{
foreach (Collider2D coll in overlap)
{
Debug.Log (coll.GetInstanceID());
if (coll.name.Contains("alien"))
{
//problem here:
Destroy (coll.gameObject);
}
}
}
Destroy(coll.gameObject)
niszczy wszystkie klony permanantly a nowe nie są wystąpienia i pojawia się błąd MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.
Czy istnieje sposób, aby zniszczyć to, i to w specyficzny klon? Próbowałem różnych nazw i używałem Destroy(GameObject.Find(coll.name))
, ale to także niszczy wszystkie klony i zapobiega powstawaniu nowych.
Ktoś pomaga?
UPDATE:
instancji w następujący sposób:
private bool bCanCreateParachuter = true; // bool to stop the spawning
GameObject go;
// Use this for initialization
void Start() {
//handling screen orientation
Screen.orientation = ScreenOrientation.LandscapeLeft;
///
go = (GameObject)Instantiate(Resources.Load("alienPink"));
StartCoroutine("CreateParachuter");
}
IEnumerator CreateParachuter()
{
while(bCanCreateParachuter)
{
Instantiate(go, new Vector3(Random.Range(-10,10), Random.Range(-5,5), 0), Quaternion.identity);
// Instantiate(go, new Vector3(Random.Range(-10,10), Random.Range(-10,10), 0), Quaternion.identity);
go.name = "alienPink"+nextNameNumber;
nextNameNumber++;
yield return new WaitForSeconds(Random.Range(0f,1f));
yield return null;
}
yield return null;
}
Crucial Aktualizacja:
Kod działa, jeśli odkomentowaniu if (grabbedObject !=null)
w
// if (grabbedObject != null) {
//works if uncomment above for some reason
Collider2D[] overlap = Physics2D.OverlapCircleAll (ball.transform.position, (ball.renderer.bounds.size.x)/2);
if (overlap.Length>=1){
foreach (Collider2D coll in overlap){
Debug.Log (coll.GetInstanceID());
if (coll.name.Contains("alien")){
Destroy (coll.gameObject);
}
}
}else {
// Debug.Log (grabbedObject.renderer.bounds.size.x);
}
To tło grabbedObject:
Rigidbody2D grabbedObject = null;
. . .
RaycastHit2D hit = Physics2D.Raycast(mousePos2D , dir);
//if (hit!=null && hit.collider!=null){
// check collisions with aliens
// OnCollisionEnter2D(grabbedObject.collisionDetectionMode);
if (hit.collider!=null){
// we clicked on something lol... something that has a collider (box2d collider in this case)
if (hit.collider.rigidbody2D!=null){
//hit.collider.rigidbody2D.gravityScale = 1;
grabbedObject = hit.collider.rigidbody2D;
// circleCollider = hit.collider.collider2D. ;
springJoint = grabbedObject.gameObject.AddComponent<SpringJoint2D>();
// set the anchor to the spot on the object that we clicked
Vector3 localHitPoint = grabbedObject.transform.InverseTransformPoint(hit.point);
springJoint.anchor = localHitPoint;
//
dragLine.enabled = true;
}
}
Zasadniczo grabbedObject jest coś kliknąć i przeciągnąć na na ekranie (dowolny GameObject), co mi brakuje tu ludzi?
W jaki sposób tworzysz klony 'gameObject'? – Dai
Prawdopodobnie coś nie tak z twoim "klonem" kodu ... lub "Zniszcz" - pamiętaj, aby opublikować najmniejszy możliwy zestaw kodu, który pokazuje problem ze wszystkimi powiązanymi elementami. –
Zaktualizowany oryginalny post w celu włączenia wystąpienia –