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++;
}
テール変数を初期化していますか?はいの場合は、関連するコードを共有してください。 –
破壊線はテールを破壊するものですが、実際のオブジェクトを破壊しています。あなたの文言は混乱していますか、それとも間違っていますか?あなたの破棄行はDestroy(next.gameObject)でなければならないと思います。 – Everts
私はテール変数を初期化していません。私のヘビはキューブで構成されています。私は1つのキューブをインスタンス化し、それを頭に割り当て、私は蛇が旅行している方向に新しいキューブを作成し続けます。次に私の蛇の最後のキューブを尾として保存し、最大サイズに達したら "尾" 。私は絶えず新しいキューブ「頭」を作り、蛇がグリッドを動くときに最後のキューブ「尾」を破壊しています。 – xslipstream