C# 分数没有增加
我创建了一个简单的游戏,玩家与敌人碰撞,分数将增加1。如何正确地做 下面是我的代码:C# 分数没有增加,c#,android,unity3d,C#,Android,Unity3d,我创建了一个简单的游戏,玩家与敌人碰撞,分数将增加1。如何正确地做 下面是我的代码: public class Bird : MonoBehaviour { public GameObject deathparticales; public Vector2 velocity = new Vector2(-2, 0); public float range = 5; public int score; private string scoreText;
public class Bird : MonoBehaviour {
public GameObject deathparticales;
public Vector2 velocity = new Vector2(-2, 0);
public float range = 5;
public int score;
private string scoreText;
// Use this for initialization
void Start()
{
score = 0;
rigidbody2D.velocity = velocity;
transform.position = new Vector3(transform.position.x, transform.position.y - range * Random.value, transform.position.z);
}
// Update is called once per frame
void Update () {
// Die by being off screen
Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
if (screenPosition.x < -10)
{
Die();
}
scoreText = "Score: " + score.ToString();
}
void OnGUI ()
{
GUI.color = Color.black;
GUILayout.Label(scoreText);
}
// Die by collision
void OnCollisionEnter2D(Collision2D death)
{
if(death.transform.tag == "Playercollision")
{
score++;
Destroy(gameObject);
Instantiate(deathparticales,transform.position,Quaternion.identity);
}
}
void Die()
{
Application.LoadLevel(Application.loadedLevel);
}
}
公共类鸟类:单一行为{
公共游戏对象死亡粒子;
公共向量2速度=新向量2(-2,0);
公众浮动范围=5;
公众智力得分;
私有字符串文本;
//用于初始化
void Start()
{
得分=0;
刚体2d.速度=速度;
transform.position=新矢量3(transform.position.x,transform.position.y-范围*Random.value,transform.position.z);
}
//每帧调用一次更新
无效更新(){
//在银幕之外死去
Vector2屏幕位置=Camera.main.WorldToScreenPoint(transform.position);
如果(屏幕位置.x<-10)
{
模具();
}
scoreText=“Score:+Score.ToString();
}
void OnGUI()
{
GUI.color=color.black;
GUILayout.Label(scoreText);
}
//撞死
无效OnCollisionInter2D(碰撞2D死亡)
{
if(death.transform.tag==“Playercollision”)
{
分数++;
摧毁(游戏对象);
实例化(死亡粒子、变换、位置、四元数、标识);
}
}
空模()
{
Application.LoadLevel(Application.loadedLevel);
}
}
如果所有代码都来自同一个脚本,问题是您正在增加Bird类的一个实例的分数,然后杀死该实例:
score++;
Destroy(gameObject);
gameObject
指的是这个Bird类实例所附加到的游戏对象
Score变量只是公共的,这意味着Bird的每个实例都有自己的,但您可以从其他脚本访问该变量。如果您只想让所有鸟类共享一个分数变量,您可以将该变量设置为静态变量
但是,如果您有多个bird,所有这些bird都将调用OnGUI函数并将值绘制到屏幕上。所以最好改变你的设计,把分数转移到其他游戏对象上。问题
你试图更新那些鸟中每个人的得分
解决方案
您需要一个只用于处理分数的类
public class ScoreManager : MonoBehaviour
{
private int score = 0;
private static ScoreManager instance;
void Awake()
{
instance = this;
}
public void incrementScore(int amount)
{
score += amount;
}
public static ScoreManager getInstance()
{
return instance;
}
void OnGUI ()
{
string scoreText = "Score: " + score.ToString();
GUI.color = Color.black;
GUILayout.Label(scoreText);
}
}
然后,每次您想要更新分数时,都要从另一个类调用ScoreManager
,如下所示:
ScoreManager.getInstance().incrementScore(10);
使用调试器。当您希望调用我时,请确保调用了Update()
方法。确保使用新值scoreText
的代码(您没有在此处发布)在执行Update()
方法后实际执行。如果您仍然无法理解,请编写一个好的代码示例并更新此问题或发布一个新问题:无法理解如何操作请帮助我如果您无法理解如何使用调试器,那么SO可能不是您获得帮助的最佳论坛。在这里的答案对您有意义之前,您至少需要对如何使用可用的工具集(如VisualStudio)有一个良好的理解。