【问题标题】:Scoring points using triggers in Unity在 Unity 中使用触发器评分
【发布时间】:2022-06-29 04:29:01
【问题描述】:

我希望每当我的玩家通过障碍物的特定部分时,它应该在分数上增加 2 分。为了做到这一点,我做了一个障碍的孩子。这个子对象包含覆盖障碍物特定部分的盒子对撞机(我在 Unity 中打开了 Is Trigger)。

关于有触发器的孩子的代码 -

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

public class Score : MonoBehaviour
{
    float points;
    
    void Start()
    {
    
    }

    void Update()
    {
        Debug.Log(points);
    }
    void OnTriggerExit2D(Collider2D other)
   {
        points += 2f;
   }
}

问题在于,在控制台中,点只显示 0 和 2,就像这样 -

Console

通过障碍物后应该是0、2、4、6...

也正在创建原始障碍的克隆,即我每次都通过一个新的克隆;以防这是导致问题的原因。

【问题讨论】:

  • 场景中是否只有一个 Score 脚本?
  • 这个问题不是关于unityscript,而是关于c#

标签: c# unity3d


【解决方案1】:

是的,很明显它会打印出 0 和 2,因为您的脚本不使用集中评分系统,它只是更新特定实例中的分数。您可以创建另一个脚本,将其命名为 GameManager,您可以在其中设置玩家得分变量,并且在您的子函数的触发退出函数时,将增加该 GameManager 变量 playercore 的得分。

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

public class GameManager : MonoBehaviour
{
    public float playerPoints = 0f;
}

在乐谱脚本中

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

public class Score : MonoBehaviour
{
public GameManager manager; // Drag and drop the gamemanager object from scene in to this field
    void OnTriggerExit2D(Collider2D other)
   {
        manager.playerPoints += 2f;
        Debug.Log(manager.playerPoints);
   }
}

【讨论】:

  • 这样,如果我重新开始游戏,积分会从上次结束的地方继续。例如,如果我上次停在 12 点,那么下一次我将从 12、14、16... 开始,而不是 0、2、4...
  • 是的,它会这样做。当您完全输掉比赛时,只需添加代码即可结束比分。
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多