屏幕上的文字不正确

时间:2016-01-19 13:18:05

标签: unity3d

嗨,我是这个团结的新手,我正在制作一个2D游戏问题。我正面临着在屏幕上显示正确的文字,例如我有一个score计数来跟踪得分然后我通过count.text显示此文本,但问题是,当游戏开始时,屏幕上的文字显示“0”,score也是0,然后我拍摄一个苹果和score变为1,count.text也变为1,但屏幕上的文字仍为0,当我拍摄另一个箭头时,scorecount.text显示的值为2但是在屏幕上显示1,依此类推。我按照滚球的团结教程。这是我的代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class arrowcounttutorial : MonoBehaviour {

    public GameObject Arrow;
    public GameObject apple;
    public int score = 0;
    public Text count;

    // Use this for initialization
    void Start () {
        this.gameObject.GetComponent<Rigidbody2D> ().AddForce (transform.right*1500.0f);
        //score = 0;
        //showcounttext ();
        count.text =  score.ToString ();
    }


    // Update is called once per frame
    void Update () {
        Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        diff.Normalize();

        float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 0);

        if (Input.GetMouseButtonUp (0)) {


            GameObject bullet_new;

            bullet_new = Instantiate (Arrow,new Vector2 (-0.23f, -3.78f), Quaternion.identity) as GameObject;
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition),Vector2.zero);
            if (hit.collider!= null ) {

                LeanTween.move(bullet_new,  hit.collider.transform.localPosition, 1);
                if(hit.collider.tag == "fruit")
                {           
                    score++;
                    //showcounttext();
                    count.text =  score.ToString ();
                    print(count.text);
                    Destroy(hit.collider.gameObject,1);
                    Destroy(bullet_new,1);


                }

            }


        }
    }
/*
    void showcounttext(){

        count.text =  score.ToString ();
    }
    */
}

此外,如果我在void开始时初始化得分,即使得分和count.text为1,2,3,4,5等,文本仍保持为0。我该怎么办?

更新 我不知道它是如何工作的但我调用了一个调用函数Invoke ("showcounttext",1);并且它有效。我不会删除这个问题以防其他人有同样的问题:)

1 个答案:

答案 0 :(得分:2)

我看到了你的答案,很好,它是固定的,但它不是最好的解决方案。

在Unity3D版本5.3.1p3之前,此引擎在更新画布时遇到问题,有时UI内容不足。你没有告诉你使用的版本,但我几乎肯定在这种情况下它会帮助调用

Canvas.ForceUpdateCanvases ();

在您的代码中,它应该是这样的:

 if(hit.collider.tag == "fruit")
                {           
                    score++;
                    //showcounttext();
                    count.text =  score.ToString ();
                    print(count.text);
                    Destroy(hit.collider.gameObject,1);
                    Destroy(bullet_new,1);

                    Canvas.ForceUpdateCanvases ();
                }

试试这个,或升级Unity3D。