[我正在尝试让我的游戏角色收集硬币,这些硬币随机出现在场景中,穿过五个车道,并且获得的每个硬币的分数都出现在屏幕上。除了一件事,一切都运转良好,在收集它们之后,没有硬币从场景中被销毁,但比分系统似乎运行良好,我真的不知道我做错了什么。
硬币的游戏对象是预制的,正在由场景中的另一个主要游戏对象加载。有两种C#脚本,一种用于评分文本脚本,另一种用于硬币脚本。如果有人可以帮助我,我将不胜感激,谢谢!
这是硬币脚本的代码:
public class CoinScript : MonoBehaviour {
public GameObject PickUp;
void OnTriggerEnter(Collider col)
{
PickUp = GameObject.FindGameObjectWithTag("PickUp");
if (gameObject != null)
{
// Do something
Destroy(gameObject);
ScoreTextScript.coinAmount++;
}
}
}
这是分数文本脚本的代码:
public class ScoreTextScript : MonoBehaviour {
Text text;
public static int coinAmount;
void Start()
{
text = GetComponent<Text>();
}
void Update()
{
text.text = coinAmount.ToString();
}
}
尽管您的问题很难理解,但我可以提出以下解决方案,以显示在用户界面上:
1)创建事件通道对象和脚本
事件通道是观察者,事件发生时会通知班级
让我们以我团队的代码为例,将其用作硬币的灵感来源
namespace Game
{
[Findable(R.S.GameObject.GameHasEndedFormallyEventChannel)]
public class GameHasEndedFormallyEventChannel : EventChannel
{
public event EventHandler OnGameEnded;
public override void Publish()
{
if (OnGameEnded != null)
{
OnGameEnded();
}
}
}
}
事件处理程序用于将“预订”事件并等待信号的类。 Publish方法适用于将事件通知给订阅的类的人。
不要忘记将其添加到GameObject(最好是所有其他gameobject脚本均可访问)
现在在检测玩家与硬币碰撞的类中,通过找到它的gameObject实例化EventChannel并在碰撞后立即调用方法publish()。
在UI类上,添加以下代码(也不要忘记在此类中找到事件通道):
private void OnEnable()
{
playerGainedScoreEventChannel.OnCoinGained += YourMethodToUpdateScore;
}
以及在更新分数的方法中,您可以执行以下操作:
score++
scoreUI.text = score.ToString()
我希望这会有所帮助