2014-03-07 2 views
1

Итак, у меня есть эта часть кода, которая увеличивает счет после того, как мяч попадает в кирпич, но не увеличивается в зависимости от того, как я, по-моему, запрограммировал его. Когда он попадает в brick3, я хочу, чтобы он увеличил показатель на 10. У меня есть переменная с названием bonusBall, которая, как предполагается, умножает все, что имеет счет, на 2. bonusBall используется только тогда, когда мяч попадает в кирпич сразу после наложения другого кирпича. Поэтому, когда он попадает в кирпич2 после того, как он попадает в brick3, он должен умножить счет на 2. В этом scenerio оценка должна равняться 40, потому что она поражает brick3 (10 очков), тогда она поражает brick2 (10 очков) и потому, что она поражает brick2 right после удара кирпича 3 счет умножается на 2, что приводит нас к общей сложности 40. Моя реальная проблема заключается в том, что когда мяч сталкивается с веслом, мне нужно, чтобы значение бонусного бонуса возвращалось к 0. У меня есть оператор If для этого но он, похоже, не работает. После того, как мяч попадает на весло, счет все равно умножается на 2, когда он попадает в кирпич. Вот код:Unity 3D Как получить мой счет, чтобы увеличить его?

#pragma strict 

private var score : int=0; 
private var comboBall : int=0; 
var guiScore : GUIText; 

var blue : Texture; 

var isBlue : boolean = false; 

var particle3 :boolean = false; 

var brickPieces : ParticleSystem; 

var brickPieces2 : ParticleSystem; 

function Start() { 
    guiScore.text="Score: 0"; 
} 

function OnCollisionEnter(col : Collision){ 

    if(col.collider.name == "Brick3"){ 
     Instantiate(brickPieces,transform.position,transform.rotation); 
     brickPieces.Play(); 
     particle3 = true; 
     Destroy(col.gameObject); 
     score += 10; 
     guiScore.text= "Score: " + score; 
     renderer.material.mainTexture = blue; 
     isBlue = true; 
    } 

    if(col.collider.name == "Brick2" && isBlue == true){ 
     Instantiate(brickPieces2,transform.position,transform.rotation); 
     brickPieces2.Play(); 
     Destroy(col.gameObject); 
     score += 10; 
     comboBall = 2; 
     if(comboBall == 2){ 
      score = comboBall*score; 
     } 

     guiScore.text= "Score: " + score; 
     print("collided with brick"); 
    } 

    if(col.collider.name == "paddle"){ 
     comboBall = 0; 
    } 

ответ

1

Просто глядя на ваш код и описание его трудно точно знать, какое поведение вы ищете, но сначала давайте посмотрим на то, что делает ваш код. Посмотрите на комментарии я добавил в коде ниже:

if(col.collider.name == "Brick2" && isBlue == true){ 
    Instantiate(brickPieces2,transform.position,transform.rotation); 
    brickPieces2.Play(); 
    Destroy(col.gameObject); 
    score += 10; 

    // HERE...comboBall will always be set to 2, so 
    // the following if statement is useless. Your 
    // score will always be multiplied by two. 
    comboBall = 2; 
    if(comboBall == 2){ 
     score = comboBall*score; 
    } 

    guiScore.text= "Score: " + score; 
    print("collided with brick"); 
} 

Я думаю, что вы действительно хотите сделать, это сократить comboBall = 2; от Brick2 столкновения при и вставить в таранной случае Brick3. Так, OnCollisionEnter функция становится:

function OnCollisionEnter(col : Collision){ 

    if(col.collider.name == "Brick3"){ 
     Instantiate(brickPieces,transform.position,transform.rotation); 
     brickPieces.Play(); 
     particle3 = true; 
     Destroy(col.gameObject); 
     score += 10; 
     guiScore.text= "Score: " + score; 
     renderer.material.mainTexture = blue; 
     isBlue = true; 

     // MOVED COMBO CODE TO HERE 
     comboBall = 2; 
    } 

    if(col.collider.name == "Brick2" && isBlue == true){ 
     Instantiate(brickPieces2,transform.position,transform.rotation); 
     brickPieces2.Play(); 
     Destroy(col.gameObject); 
     score += 10; 

     if(comboBall == 2){ 
      score = comboBall*score; 
     } 

     guiScore.text= "Score: " + score; 
     print("collided with brick"); 
    } 

    if(col.collider.name == "paddle"){ 
     comboBall = 0; 
    } 
} 

Таким образом, следующее поведение реализовано:

  • Brick2 ударил - comboBall значение 2.
  • IF следующий хит элемент Brick3 :
    • comboBall - 2, поэтому счет будет умножен на 2.
  • ELSE IF следующий хит элемент весло:
    • comboBall устанавливается в 0.
    • IF следующий хит элемент является Brick3:
      • comboBall является 0, поэтому оценка не будет умножаться ,
    • ELSE IF следующий хит элемент Brick2:
      • вернуться к верхней точке пули.

смысл Make? Из вашего описания это похоже на поведение, которое вы ищете. Дайте мне знать, если есть какие-либо вопросы.

Смежные вопросы