在过去的几天里,我一直在尝试着创造一款简单的《flappy bird》游戏。目前,我正试图编写一些代码,让玩家每次通过两个管道时得分都上升。我得到一个错误,虽然,我不太确定如何修复它。这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Score : MonoBehaviour {
public static int score = 0;
private void Start() {
score = 0;
}
private void Update() {
GetComponent<UnityEngine.UI.Text>().text = score.ToString();
}
public void scoreUp() {
score++;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class AddScore : MonoBehaviour {
public Score score;
private void OnTriggerEnter2D (Collider2D collision) {
score.scoreUp(); // the line thats giving me problems
}
}
我得到的错误是:错误CS1061:类型Score不包含scoreUp的定义,并且没有类型Score的扩展方法scoreUp可以找到。
这对我来说没有意义。Unity显示"CS1061错误是在您尝试调用不存在的方法或访问不存在的类成员时引起的。"但是从上面的代码中可以看出,我确实有一个叫做Score的类,并且在它里面有一个叫做scoreUp()的方法。
此外,我以前使用过这种代码(我创建了一个类,在另一个类中使用它和它的方法),没有任何问题。所以我真的不确定在这种情况下问题出在哪里。
我认为你的问题的解决方案是使"AddScore"类"Score"的子类。
要使它成为子对象,只需更改AddScore: MonoBehaviour ->AddScore: Score
你还可以做什么,而不是使用公共scoreUp()把它保护,这样只有子类可以访问它。
你的代码应该是这样的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Score : MonoBehaviour {
public static int score = 0;
private void Start() {
score = 0;
}
private void Update() {
GetComponent<UnityEngine.UI.Text>().text = score.ToString();
}
protected void scoreUp() {
score++;
}
第1位,第2位
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class AddScore : Score{
private void OnTriggerEnter2D (Collider2D collision) {
scoreUp();
}
}