从另一个脚本更改 Int

Changing Int from another script

我想从 HarmEnemiesScript 更改 playerCurScore 整数(在 ScoreManager 脚本中)。

(脚本附加到场景中的对象)

using UnityEngine;
using System.Collections;

public class ScoreManager : MonoBehaviour 
{
    public int playerScore;
    public int playerCurScore;

    public void Start()
    {
        playerScore = 0;
        playerCurScore = 0;
    }

    public void Update()
    {
        playerCurScore = playerScore;
    }
}

(附在 Enemy 上的脚本)

using UnityEngine;
using System.Collections;

public class HarmEnemies : MonoBehaviour 
{
    public float enemyHealth;
    public float enemyCurHealth;
    public float playerDamage;

    public void Start()
    {
        enemyCurHealth = enemyHealth;
    }

    public void OnTriggerEnter(Collider theCollision)
    {
        if(theCollision.tag == "Fireball")
        {
            enemyCurHealth = enemyCurHealth - playerDamage;
            Destroy (theCollision);
        }
        if(enemyCurHealth <= 0)
        {
            Destroy (this.gameObject);
        }
    }
}

那么我该如何更改 HarmEnemies 中的 playerCurScore Int。我知道我必须使用 GetComponent 并且我可以使用 playerCurScore++;

你犯了几个错误。最主要的是 ScoreManager 脚本不应附加到 EnemyGameObject.

制作一个单独的游戏对象并将其命名为ScoreManager。然后在场景中找到并更新评分。

 ScoreManager s = GameObject.Find("ScoreManager");
 s.SendMessage("incrementScore", amount);

在 ScoreManager class 你需要这个:

 private static int score;

 public void incrementScore(int amount)
 {
     score += amount;
 }

如果你很聪明,你可以制作整个 ScoreManager class static 然后它甚至不必是 MonoBehaviour.

你可以这样称呼它:

 ScoreManager.incrementScore(amount);

关于static classes的信息。

我现在可以修复它,谢谢你的静态提示。我的代码现在看起来像这样:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ScoreManager : MonoBehaviour 
{
    public static float playerScore;
    public Text scoreCount;

    public void Update()
    {
        ScoreController ();
    }

    public void ScoreController()
    {
        scoreCount.text = "Score: " + playerScore;
        Debug.Log ("Score: " + playerScore);
    }
}




using UnityEngine;
using System.Collections;

public class HarmEnemies : MonoBehaviour 
{
    public float enemyHealth;
    public float enemyCurHealth;
    public float playerDamage;

    public void Start()
    {
        enemyCurHealth = enemyHealth;
    }

    public void OnTriggerEnter(Collider theCollision)
    {
        if(theCollision.tag == "Fireball")
        {
            enemyCurHealth = enemyCurHealth - playerDamage;
            Destroy (theCollision);
        }

        if(enemyCurHealth <= 0)
        {
            ScoreManager.playerScore = (ScoreManager.playerScore + 1);
            Destroy (this.gameObject);
        }
    }
}