【发布时间】:2021-04-06 04:26:41
【问题描述】:
我需要以某种方式制作,当玩家运行 raycast 时,得分值会更新 1。但是,它会更新每一帧。
我尝试用布尔检查来修复它,但无论如何,它和以前一样工作。
我在哪里做错了?
代码如下:
public class ScoreBehavior : MonoBehaviour{
public delegate void ScoreUpOnPass();
public static event ScoreUpOnPass onRayHit;
private int score = 0;
private bool hitOnce = false;
void Start()
{
}
void Update()
{
RaycastHit hit;
Ray checkRay = new Ray(transform.position, Vector3.down);
if(Physics.Raycast(checkRay, out hit))
{
if (hit.collider.tag == "Player" && !hitOnce)
{
hitOnce = true;
Debug.Log(score); // updates every frame
onRayHit?.Invoke();
}
else
{
hitOnce = false;
}
}
}
}
【问题讨论】:
-
场景中是否还有其他带有碰撞器的对象?我认为当 hit.collider.tag 不是 Player 时它会被重置