【问题标题】:GameOver scene loaded whenever the screen is clicked每当单击屏幕时都会加载 GameOver 场景
【发布时间】:2014-08-23 20:44:37
【问题描述】:

首先,这是我的脚本:

#pragma strict

var incorrect: AudioClip;
var correct: AudioClip;
var anything: GameObject;
var diamond: Sprite;
var circle: Sprite;
var triangle: Sprite;
var square: Sprite;
var number: int;
var AcceptInput: boolean = true;

static
var score: int = 1;

var guiScore: GUIText;


function Start() {

    number = Random.Range(1, 4);

    if (number == 1) {
        anything.GetComponent(SpriteRenderer).sprite = diamond;
    } else if (number == 2) {
        anything.GetComponent(SpriteRenderer).sprite = circle;
    } else if (number == 3) {
        anything.GetComponent(SpriteRenderer).sprite = triangle;
    } else {
        anything.GetComponent(SpriteRenderer).sprite = square;
    }
}


function Update() {

    if (Input.GetMouseButtonDown(0)) {
        if (AcceptInput) {
            AcceptInput = false;
            Debug.Log("Clicked");
            if (anything.GetComponent(SpriteRenderer).sprite == diamond) {
                audio.PlayOneShot(correct);
                guiScore.text = "Score: " + score;
                StartCoroutine("YieldTestEnumerator");

                AcceptInput = true;
                number = Random.Range(1, 4);
                if (number == 1) {
                    anything.GetComponent(SpriteRenderer).sprite = diamond;
                } else if (number == 2) {
                    anything.GetComponent(SpriteRenderer).sprite = circle;
                } else if (number == 3) {
                    anything.GetComponent(SpriteRenderer).sprite = triangle;
                } else {
                    anything.GetComponent(SpriteRenderer).sprite = square;
                }

            } else if (anything.GetComponent(SpriteRenderer).sprite == circle) {

                Debug.Log("Wrong Answer!");
                Application.LoadLevel("GameOver");
                audio.PlayOneShot(incorrect);

            } else if (anything.GetComponent(SpriteRenderer).sprite == triangle) {

                Debug.Log("Wrong Answer!");
                Application.LoadLevel("GameOver");
                audio.PlayOneShot(incorrect);

            } else if (anything.GetComponent(SpriteRenderer).sprite == square) {

                Debug.Log("Wrong Answer!");
                Application.LoadLevel("GameOver");
                audio.PlayOneShot(incorrect);

            }
        }
    }
}

function YieldTestEnumerator() {
    yield WaitForSeconds(0.5);
}

如您所见,这是一个多项选择游戏。由于一些愚蠢和奇怪的原因,如果我在屏幕上按 ANYWHERE,它只会加载“GameOver”场景,即使我得到了正确的答案。为什么它会检测到屏幕上任何地方的触摸?真是太奇怪了。你们有任何想法如何解决这个问题吗?我不明白这个。任何帮助将不胜感激。

【问题讨论】:

  • 请通过在适当位置缩进(倍数)4 个空格来修正缩进。现在你的代码几乎无法阅读。
  • 这样更好吗? @巴特
  • 不是真的,但我想我修好了。看看差异并确保它仍然正确。第一个是免费的。 ;)
  • 所以我假设您只希望在单击特定项目时发生该操作?我在您的代码中看不到任何内容,您可以检查是否是这种情况。您现在只是响应点击,不再过滤。
  • 所以我要做的是当你按下按钮时,检查另一个对象的精灵是否是菱形。如果是则加1分。然后再次更改精灵。如果不是,则加载场景游戏结束,现在,出于某种奇怪的原因,我按下屏幕上的任意位置,将我带到游戏结束场景@Bart

标签: unity3d unityscript


【解决方案1】:

将 2D 对撞机附加到您的任何东西并使用

OnMouseDown()
{
    var lSprite : Sprite ;
    lSprite = GetComponent(SpriteRenderer).sprite  ;
    if (lSprite == diamond) {
        audio.PlayOneShot(correct);
        guiScore.text = "Score: " + score;
        StartCoroutine("YieldTestEnumerator");

        AcceptInput = true;
        number = Random.Range(1, 4);

        if (number == 1) {
            lSprite = diamond;
        } else if (number == 2) {
            lSprite = circle;
        } else if (number == 3) {
            lSprite = triangle;
        } else {
            lSprite = square;
        }

    } else 
    if (lSprite == circle) {

        Debug.Log("Wrong Answer!");
        Application.LoadLevel("GameOver");
        audio.PlayOneShot(incorrect);

   } else 
   if (lSprite == triangle) {

        Debug.Log("Wrong Answer!");
        Application.LoadLevel("GameOver");
        audio.PlayOneShot(incorrect);

   } else
   if (lSprite == square) {

        Debug.Log("Wrong Answer!");
        Application.LoadLevel("GameOver");
        audio.PlayOneShot(incorrect);

   }

}

【讨论】:

  • 你在点击什么?
  • 不,我有一个变量的原因是因为它是一个不同的对象。我向您展示的脚本是一个按钮,如果您单击它,它会检查精灵的任何内容并添加分数。
  • 我尝试将 collider2d 添加到其他事物中,但没有成功
  • 脚本必须附加到具有 collider2d 的对象上,并且您必须单击该对象。为确保您点击的是对象,请在 OnMouseDown 的开头添加一个 Debug.Log(“点击!”)。
  • 不不不不,你不明白我在说什么。上面的脚本是一个按钮,就像多选游戏中的按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2021-10-03
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多