在unity3d中创建一个突围游戏c#-bricks不会被摧毁

时间:2016-11-04 14:10:49

标签: c# unity3d destroy

我使用团结教程制作了突破性的游戏,一切似乎运作良好,但是当我在游戏模式中玩它时出现了一些错误。因此,在我尝试修复错误后,砖块不再被破坏。我尝试撤消它,重新编写代码,甚至重新编写同一个项目但没有任何作用。我该怎么办?

这些是我游戏的代码,与教程中的代码完全相同!

桨:

public class Paddle : MonoBehaviour {

 public float paddleSpeed = 1f;
 private Vector3 playerPos = new Vector3(0, -9f, 0);
 void Update ()
 {
     float xPos = transform.position.x +     (Input.GetAxis("Horizontal")*paddleSpeed);
     playerPos = new Vector3(Mathf.Clamp(xPos, -7.5f, 7.5f), -9f, 0f);
     transform.position = playerPos;
 }

}

球:

public class Ball : MonoBehaviour {

 private float ballInitialVelocity = 600f;
 private Rigidbody rb;
 private bool ballInPlay;

 void Awake ()
 {
     rb = GetComponent<Rigidbody>();
 }

 void Update ()
 {
 if(Input.GetButtonDown("Fire1") && ballInPlay==false)
     {
         transform.parent = null;
         ballInPlay = true;
         rb.isKinematic = false;
         rb.AddForce(new Vector3(ballInitialVelocity, ballInitialVelocity, 0));
     }
 }
}

GM:

using UnityEngine; using System.Collections;

public class deathZone : MonoBehaviour {

 void OnTriggerEnter(Collider col)
 {
     GM.instance.loseLife();
 }
}

public class GM : MonoBehaviour {

 public int Lives = 3;
 public int bricks = 16;
 public float resetDelay = 1f;
 public Text livesText;
 public GameObject gameOver;
 public GameObject bricksPrefab;
 public GameObject youWon;
 public GameObject paddle;
 public GameObject deathParticles;
 public static GM instance = null;
 private GameObject clonePaddle;
 void Start()
 {
     if (instance == null)
         instance = this;
     else if (instance != this)
         instance = null;
     setup();
 }
 public void setup()
 {
     clonePaddle = Instantiate(paddle, new Vector3(0, -9,0),  Quaternion.identity) as GameObject;
     Instantiate(bricksPrefab, new Vector3((float)18.5, (float)-61.14095, (float)238.4855), Quaternion.identity);
 }
 void checkGameOver()
 {
     if (bricks < 1)
     {
         youWon.SetActive(true);
         Time.timeScale = .25f;
         Invoke("Reset", resetDelay);
     }
     if (Lives < 1)
     {
         gameOver.SetActive(true);
         Time.timeScale = .25f;
         Invoke("Reset", resetDelay);
     }
 }
 void Reset()
 {
     Time.timeScale = 1f;
     Application.LoadLevel(Application.loadedLevel);
 }
 public void loseLife()
 {
     Lives--;
     livesText.text = "Lives: " + Lives;
     Instantiate(deathParticles, clonePaddle.transform.position,  Quaternion.identity);
     Destroy(clonePaddle);
     Invoke("SetupPaddle", resetDelay);
     checkGameOver();
 }
 void SetupPaddle()
 {
     clonePaddle = Instantiate(paddle, new Vector3(0, -9, 0), Quaternion.identity) as GameObject;
 }
 public void destroyBrick()
 {
     bricks--;
     checkGameOver();
 }
}

砖:

public class Bricks : MonoBehaviour {

public GameObject brickParticle;

 void OnCollisionEnter(Collision other)
 {
     Instantiate(brickParticle, transform.position, Quaternion.identity);
     GM.instance.destroyBrick();
     Destroy(gameObject);
 }
}

deathZone:

public class deathZone : MonoBehaviour {
void OnTriggerEnter(Collider col)
 {
     GM.instance.loseLife();
 }
}

2 个答案:

答案 0 :(得分:0)

问题似乎与碰撞者有关。如果放置正确,您应该在编辑器中检查它们(因为没有写入碰撞时的debug.log)。还要确保你使用的是碰撞器而不是碰撞器2D(通过不同方法调用碰撞)

答案 1 :(得分:0)

在本教程中,您必须确保所有游戏块GameObject都包含 Bricks 脚本和 BoxCollider 组件。球也应该有 Rigidbody SphereCollider 组件。

调试碰撞触发器的简单方法是在 OnCollisionEnter / OnTriggerEnter /中使用Debug.Log("something");作为第一个命令。 。方法。