2017-05-15 13 views
0

私は、コードを実行するRemoveTail関数で問題に遭遇しています:destroy(gameObject)。このスネークゲームは私のスネークプレハブのクローンを作成し、maxSizeに達すると "tail"を割り当て、 "tail" gameオブジェクトを削除することでスネークの長さを制御します。私は自分のエラーは、ゲームがスネークのインスタンスを削除する代わりに、プレハブのクローンである私の尾を削除することによると理解しています。どのように私はこの問題をresoleことができるかに関する任意のアイデアや提案?私GameControllerスクリプトから資産を破壊することはデータの損失を避けることができません

スネークスクリプト

public class Snake : MonoBehaviour { 

private Snake next; 
public Snake GetNext() { 
    return next; 
} 

public void SetNext(Snake IN) { 
    next = IN; 
} 

public void RemoveTail() {  // This method destroys the gameObject assigned as tail 
    Destroy(gameObject); 
} 

public static Action<string> hit; 

public void OnTriggerEnter(Collider other) { 
    if (hit != null) 
     hit(other.tag); 
    if (other.tag == "Food") 
     Destroy(other.gameObject); 
    } 
} 

抜粋

void TailFunction() { 
    Snake tempSnake = tail; // Create a temp Snake variable to store tail information 
    tail = tail.GetNext(); // Now that we have a copy of original tail in tempSnake, we set the next Snake gameobject as our new tail 
    tempSnake.RemoveTail(); // Remove the original tail gameObject 
} 

void Movement() { 
    GameObject temp; 
    nextPos = head.transform.position; 
    switch (direction) { 
     case Direction.North: 
      nextPos = new Vector2(nextPos.x, nextPos.y+1); 
      break; 
     case Direction.East: 
      nextPos = new Vector2(nextPos.x+1, nextPos.y); 
      break; 
     case Direction.South: 
      nextPos = new Vector2(nextPos.x, nextPos.y-1); 
      break; 
     case Direction.West: 
      nextPos = new Vector2(nextPos.x-1, nextPos.y); 
      break; 
    } 
    temp = (GameObject)Instantiate(snakePrefab, nextPos, transform.rotation); 
    head.SetNext(temp.GetComponent<Snake>()); 
    head = temp.GetComponent<Snake>(); 
    return; 
} 

void TimerInvoke() { 
    Movement(); 
    if (currentSize == maxSize) 
     TailFunction(); 
    else 
     currentSize++; 
} 
+0

テール変数を初期化していますか?はいの場合は、関連するコードを共有してください。 –

+0

破壊線はテールを破壊するものですが、実際のオブジェクトを破壊しています。あなたの文言は混乱していますか、それとも間違っていますか?あなたの破棄行はDestroy(next.gameObject)でなければならないと思います。 – Everts

+0

私はテール変数を初期化していません。私のヘビはキューブで構成されています。私は1つのキューブをインスタンス化し、それを頭に割り当て、私は蛇が旅行している方向に新しいキューブを作成し続けます。次に私の蛇の最後のキューブを尾として保存し、最大サイズに達したら "尾" 。私は絶えず新しいキューブ「頭」を作り、蛇がグリッドを動くときに最後のキューブ「尾」を破壊しています。 – xslipstream

答えて

0

私の問題は、私は私の検査官に私のプレハブをドラッグして、私のオリジナルのヘビのキューブを削除しました。ゲームが始まったときに元の蛇のキューブをテールとして割り当ててから、ゲームオブジェクトを削除するのではなく、私のプログラムは私の実際のプレハブをテールとして割り当てて、プレハブを完全に削除しようとしていました。

関連する問題