如何让收集到一定数量的金币才能进入下一关?

How to make the next level accessible only after a certain amount of coins are collected?

我目前正在使用 c# 在 Unity 中编写一个短游戏,玩家收集 10 个金币即可进入下一关。我无法让我的 DoorController 脚本识别已收集的硬币数量。

我的目标是锁定天门,直到玩家的币值达到 10,此时它将解锁天门,玩家可以穿过天门加载下一关。使用此脚本我没有收到任何错误,但门并没有像我期望的那样运行,因为它仍然让我通过而没有收集所有硬币。

using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;

public class DoorController : MonoBehaviour
{
public int index;
public string levelName;
public int coinValue;

void  OnTriggerEnter2D(Collider2D heavengate)
{
    if (heavengate.gameObject.CompareTag("Player") && coinValue >= 10)
    Debug.Log("Coins collected" + coinValue);
    {
        SceneManager.LoadScene("EndScreenScene");
    }
}

'heavengate'是下一层的门名,设置为'Is Trigger',而'Player'显然是Player的标签,并没有设置为a触发!

Player 和 heavengate 都有 Box Collider 2d 和 Rigidbody 2d。天堂之门也设置为运动学,而玩家是动态的。

我的播放器上还有一个 CoinCollector 脚本,用于在碰撞时销毁硬币并将收集到的硬币加起来,我会把它扔掉以防它能帮上忙!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoinCollector : MonoBehaviour
{
public int coinsCollected;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Coin"))
    {
        coinsCollected++;
        Destroy(other.gameObject);
    }
}

}

如果有人能帮助我,我将不胜感激我已经坚持了几天,从这里和其他论坛观看教程和阅读帖子,似乎没有任何效果:(这可能是什么很简单但是我看不到!谢谢!!

嗯,对我来说这没有多大意义,除非你仍然忘记展示一些东西。 在第二个脚本中,您为脚本本身分配​​了一个变量,我想不出这在任何情况下都有用。比起你写了一个你永远不会调用的方法(Change Score),并且在 CoinCollector Class 中你将收集的硬币分配给一个 int,但从不在任何其他脚本中使用它。这是我的做法:

  1. 在门控制器中引用 Coincollector public CoinController coincontroller;

  2. 将收集的硬币设置为 public static int coinsCollected;

  3. 在 onTrigger 中,您在 if 语句

    之前执行 coinValue = CoinCollector.coinsCollected;

那应该工作得很好,你甚至不需要第二个脚本,但我不知道,也许它对你有用。希望对您有所帮助。