在 Unity 中使用触发器计分
Scoring points using triggers in Unity
我希望每当我的玩家通过障碍物的特定部分时,它应该为得分增加 2 分。为了做到这一点,我制作了一个 child 障碍物。 child 包含覆盖障碍物特定部分的盒子碰撞器(我在 Unity 中打开了 Is Trigger)。
child 上的代码具有触发器 -
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...
也正在创建原始障碍的克隆,即我每次通过一个新的克隆;如果这是导致问题的原因。
是的,很明显它会打印出 0 和 2,因为您的脚本不使用集中评分系统,它只是更新特定实例中的分数。您可以创建另一个脚本,将其称为 GameManager,您可以在其中设置玩家得分变量,并在触发子函数的退出函数时增加该 GameManager 变量玩家得分的得分。
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);
}
}
我希望每当我的玩家通过障碍物的特定部分时,它应该为得分增加 2 分。为了做到这一点,我制作了一个 child 障碍物。 child 包含覆盖障碍物特定部分的盒子碰撞器(我在 Unity 中打开了 Is Trigger)。
child 上的代码具有触发器 -
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...
也正在创建原始障碍的克隆,即我每次通过一个新的克隆;如果这是导致问题的原因。
是的,很明显它会打印出 0 和 2,因为您的脚本不使用集中评分系统,它只是更新特定实例中的分数。您可以创建另一个脚本,将其称为 GameManager,您可以在其中设置玩家得分变量,并在触发子函数的退出函数时增加该 GameManager 变量玩家得分的得分。
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);
}
}