c# - 我如何判断一个数字何时完成增加?
问题描述
我觉得我在这里错过了一些简单的解决方案,但我坚持这一点。我正在根据玩家在课程结束时撞到建筑物之前的移动距离来计算分数。破坏分数与距离分数是分开的,它会递增,直到所有的建筑部件都静止。
我有一个我想播放的动画,将距离得分添加到总破坏得分并给出玩家的总得分,但是一旦破坏得分停止增加,我需要触发动画。现在,建筑物的每一块都有代码来检查它是否移动并在真实时增加分数。
public class SkiLodgeScoreTracker : MonoBehaviour
{
Rigidbody rb;
private GameObject[] score;
private void Start()
{
rb = gameObject.GetComponent<Rigidbody>();
score = GameObject.FindGameObjectsWithTag("Score");
}
private void Update()
{
//check if lodgePiece is moving, while it is, add to Score object
if(rb.velocity.magnitude >= 2f && !rb.isKinematic)
{
score[0].GetComponent<SkiScore>().addToSkiScore(2f);
}
}
}
这是我想要在分数停止后触发动画的地方(这是我的另一次尝试,逻辑不起作用)
public Animator moveScore;
...
if(skiScore > 0)
{
previousScore2 = previousScore1;
previousScore1 = skiScore;
if(previousScore1 == previousScore2 && !scoreMoved)
{
moveScore.SetTrigger("EndCourse");
addScoreToSkiScore();
}
}
public void addScoreToSkiScore()
{
scoreMoved = true;
for(float i = score; i>0; i--)
{
skiScore += 1;
}
}
我想抓取一帧的分数,看看它是否等于下一帧的分数,如果是,则触发动画,但我觉得这不是一个有效的选项。
有任何想法吗?
解决方案
在SkiScore
中,跟踪有多少块在移动,当一块停止并且计数变为 0 时,执行您的操作:
public class SkiScore : MonoBehaviour
{
int movingCount;
void Start()
{
ResetMovingCount();
/* ... */
}
public void ResetMovingCount() {movingCount = 0;} // call as needed
public void OnStartedMoving() {++movingCount;}
public void OnStoppedMoving()
{
if (--movingCount == 0) OnNoneMoving();
}
void OnNoneMoving() {/* do the thing */}
/* ... */
}
对于每首乐曲,使用一个标志来记住它最近是否移动过,如果已经移动过并且不再移动,请让您的乐谱经理知道:
public class SkiLodgeScoreTracker : MonoBehaviour
{
Rigidbody rb;
private GameObject[] score;
// flag used to recognize newly stopped movement
bool recentlyMoving;
// cache for GetComponent
SkiScore mySkiScore
private void Start()
{
rb = gameObject.GetComponent<Rigidbody>();
score = GameObject.FindGameObjectsWithTag("Score");
// GetComponent is expensive, try not to call it in Update unless necessary
mySkiScore = score[0].GetComponent<SkiScore>();
}
private void Update()
{
//check if lodgePiece is moving, while it is, add to Score object
if(rb.velocity.magnitude >= 2f && !rb.isKinematic)
{
mySkiScore.addToSkiScore(2f);
recentlyMoving = true;
mySkiScore.OnStartedMoving();
}
else if (recentlyMoving)
{
recentlyMoving = false;
mySkiScore.OnStoppedMoving();
}
}
}
推荐阅读
- ajax - 如何以编程方式使用 ajax 添加微调器以选择列表?
- sql - 使用 RODBC 从 R 写入数据库:sqlSave 不起作用
- android - 滑动以更改位置 0 项的 RecyclerView 的内容(和排序顺序)会导致列表滚动
- elasticsearch - 弹性 match_phrase_prefix 设置单词顺序
- api - GitLab API - 获取总体代码行数
- antd - 如何让 AntD 中的下拉菜单不显示旁边的三个小点?
- python - Discord.py 从下拉菜单中添加角色
- kubernetes - 有没有办法将作业 id 作为环境变量注入到 kubernetes 的容器中?
- php - 为什么我不能使用 PDO/MySQL 将变量绑定到“SHOW VARIABLE LIKE”查询?
- c# - 如何在 C# 中的 1d List<> 中添加 2d List<> 的列的总和