如何收集在场景中随机出现的Unity 3D中的硬币,收集完之后销毁游戏对象并在画布上显示分数?

问题描述 投票:-1回答:1

[我正在尝试让我的游戏角色收集硬币,这些硬币随机出现在场景中,穿过五个车道,并且获得的每个硬币的分数都出现在屏幕上。除了一件事,一切都运转良好,在收集它们之后,没有硬币从场景中被销毁,但比分系统似乎运行良好,我真的不知道我做错了什么。

硬币的游戏对象是预制的,正在由场景中的另一个主要游戏对象加载。有两种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();
    }
}
c# unity3d tags destroy gameobject
1个回答
0
投票

尽管您的问题很难理解,但我可以提出以下解决方案,以显示在用户界面上:

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()

我希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.