达到分数后如何增加健康

Posted

技术标签:

【中文标题】达到分数后如何增加健康【英文标题】:How to increase health when score has reached 【发布时间】:2019-12-04 08:49:23 【问题描述】:

我正在制作一个无尽的跑步游戏。并希望在达到一定分数时增加健康/生命。在附加到 ScoreManager 的 ScoreManager 脚本中,我有:

public class ScoreManager : MonoBehaviour

public int score;
public Text scoreDisplay;

bool one = true;

Player scriptInstance = null;

void OnTriggerEnter2D(Collider2D other)

    if (other.CompareTag("Obstacle"))
    
        score++;
        Debug.Log(score);
    


// Start is called before the first frame update
void Start()

    GameObject tempObj = GameObject.Find("ghost01");
    scriptInstance = tempObj.GetComponent<Player>();


// Update is called once per frame
private void Update()

    scoreDisplay.text = score.ToString();

    if (scriptInstance.health <= 0)
    
        Destroy(this);
    

    if (score == 75 || score == 76 && one == true)
    
        scriptInstance.health++;
        one = false;
    

我使用以下几行来增加里程碑的运行状况,但必须无休止地复制代码以创建多个里程碑。

if (score == 75 || score == 76 && one == true)

    scriptInstance.health++;
    one = false;

我的问题是如何在不重复代码的情况下每75点增加生命值?

【问题讨论】:

你可以使用模数。检查if (score % 75 == 0) //addHealth @Willie 也是我的第一个想法,但在分数保持在 75 时仍然始终返回 true ... 如果里程碑定期间隔 Willie's 将是我的建议,否则,我有一系列里程碑,并且在添加分数时,如果它等于里程碑等 @Willie 如果添加一个额外的标志,你也可以简单地添加第二个专用计数器;) @derHugo 是的。两种解决方案都一样好。 【参考方案1】:

if(score % 75 == 0) 这样的模的问题是它一直返回truescore == 75 .. 所以无论如何它都需要一个额外的bool 标志。

我宁愿为此添加第二个计数器!

不要在Update 中反复检查,而是在你设置它的那一刻:

int healthCounter;

void OnTriggerEnter2D(Collider2D other)

    if (other.CompareTag("Obstacle"))
    
        score++;
        Debug.Log(score);

        // enough to update this when actually changed
        scoreDisplay.text = score.ToString();

        healthCounter++;
        if(healthCounter >= 75)
        
            scriptInstance.health++;

            // reset this counter
            healthCounter = 0;
        
    

一个缺点可能是知道您必须在重置score = 0 的任何地方重置healthCounter = 0 ...但是您也必须对任何标志解决方案执行相同的操作;)

【讨论】:

【参考方案2】:

我会选择% 运营商

private bool scoreChanged = false;
void OnTriggerEnter2D(Collider2D other)

    if (other.CompareTag("Obstacle"))
    
        score++;
        scoreChanged = true;
        Debug.Log(score);
    


if (score % 75 == 0 && scoreChanged)

    scriptInstance.health++;
    scoreChanged = false;

【讨论】:

也是我的第一个想法,但在分数保持在 75 时始终返回 true => 每帧增加一个生命值 没错,我做了一些修改!也很喜欢你的解决方案! 朱普。这就是我在评论中所说的。会这样做。

以上是关于达到分数后如何增加健康的主要内容,如果未能解决你的问题,请参考以下文章

如何获取华为运动健康服务授权码并调用Rest API访问数据?

多晒太阳对男性健康有好处

数商云:大健康产业供应商服务系统规范化供应商准入机制,助力企业数字化转型

当医疗大数据遇到健康商业保险

内观疗法在心理健康教育中的运用

如何让手机1秒打开健康码 ,任何机型!