从另一个脚本更改 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);
}
}
}
我想从 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);
}
}
}