안녕하세요! 그래서 여기에 내가하려고하는 것이 있습니다 : 나는 블록 브레이커 게임을 만들었고 장면의 모든 벽돌이 파괴되면 다음 레벨이로드되도록 코드를 작성했습니다. 잘 작동하지만 버그가 있습니다! 내가 모든 벽돌을 파괴하기 전에 잃어 버렸을 때 "다시 연주"를 누르면 장면의 벽돌 계산에 책임이있는 정적 변수가 0으로 재설정되지 않습니다! 그것은 잃어 버리기 전에 벽돌의 수를 유지하고 새로운 장면에서 벽돌의 수를 더합니다! 그래서 ex 대신 24를 반환하는 대신 (장면의 정확한 벽돌 수입니다) 35 (11 + 24)를 반환합니다 제발 그걸 고칠 수 있을까요? 먼저 벽돌 스크립트 : 여기 내가 사용하고 코드입니다(Unity3D) 모든 벽돌이 파괴되면 레벨을로드하려고합니다.
public int maxHits;
public int timesHit;
public Sprite[] hitSprites;
public static int breakableCount = 0;
private bool isBreakable;
private LevelManager levelManager;
// Use this for initialization
void Start() {
isBreakable = (this.tag == "Breakable");
if(isBreakable){
breakableCount++;
}
print (breakableCount);
timesHit = 0;
levelManager = GameObject.FindObjectOfType<LevelManager>();
}
void OnCollisionEnter2D(Collision2D collision) {
if (isBreakable) {
HandleHits();
}
}
void HandleHits(){
//TODO remove the print!!
print ("collison");
timesHit++;
if (timesHit >= maxHits) {
breakableCount--;
print (breakableCount);
levelManager.BrickDestroyed();
Destroy (gameObject);
} else {
LoadSprite();
}
}
// Update is called once per frame
void Update() {
}
//TODO Remove this when player can WIN
void NextLevel(){
levelManager.LoadNextLevel();
}
void LoadSprite(){
int spriteIndex = timesHit - 1;
this.GetComponent<SpriteRenderer>().sprite = hitSprites [spriteIndex];
}
여기에 내가 수준을 관리하기 위해 사용하고있어 LevelManager 스크립트입니다 :
public void LoadLevel (string name) {
Debug.Log ("level change requested for : " + name);
Application.LoadLevel (name);
}
public void ExitRequest() {
Debug.Log ("Exit game requested");
Application.Quit();
}
public void LoadNextLevel() {
Application.LoadLevel (Application.loadedLevel + 1);
}
public void BrickDestroyed() {
if(Brick.breakableCount <= 0) {
LoadNextLevel();
}
}
희망이 내가 제대로 설명, 그리고 죄송합니다 내가 영어 오류를 만든다면 원어민이 아닌데 감사합니다. 좋은 하루 되세요 ^^
필요한 모든 값을 재설정하는'ResetGame' 함수를 만들 것을 제안합니다. –
@ JorgeSantos 여러분의 제안에 감사드립니다. Brick 스크립트에서 ResetGame 함수를 만들었습니다. 이제 다음 레벨을로드 할 때 해당 함수를 실행하여 Brick 스크립트를 다시 실행하여 숫자를 계산합니다. 새로운 장면의 벽돌? –