嗨,我是这个团结的新手,我正在制作一个2D游戏问题。我正面临着在屏幕上显示正确的文字,例如我有一个score
计数来跟踪得分然后我通过count.text
显示此文本,但问题是,当游戏开始时,屏幕上的文字显示“0”,score
也是0,然后我拍摄一个苹果和score
变为1,count.text
也变为1,但屏幕上的文字仍为0,当我拍摄另一个箭头时,score
和count.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);
并且它有效。我不会删除这个问题以防其他人有同样的问题:)
答案 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。