所以我试图通过触摸一个多维数据集来更改另一个脚本中的变量。当前设置
每个都有自己的脚本Enemy_Stats&Character_Stats 正如您在这个小片段中所看到的,从另一个脚本访问变量是一个很不错的解决方法。
Enemy_Stats
Character_Stats
void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Enemy") { collision.gameObject.GetComponent<Enemy_Stats>().Health = collision.gameObject.GetComponent<Enemy_Stats>().Health - gameObject.GetComponent<Character_Stats>().AttackDamage; if (collision.gameObject.GetComponent<Enemy_Stats>().Health <= 0) { Destroy(collision.gameObject); } } }
荫新团结,而不是有没有办法只是类似参考吧: collision.Health?
collision.Health
如何从另一个类访问变量/函数。您要访问或调用的变量或函数必须public不是private。
public
private
public class ScriptA : MonoBehaviour{ public int playerScore = 0; void Start() { } public void doSomething() { } }
访问变量playerScore中ScriptA的ScriptB。首先,GameObject.Find使用该GetComponent功能找到脚本或组件所附加的GameObject,然后使用该函数来检索该脚本或组件所附加的游戏对象。
playerScore
ScriptA
ScriptB
GameObject.Find
GetComponent
public class ScriptB : MonoBehaviour{ ScriptA scriptInstance = null; void Start() { GameObject tempObj = GameObject.Find("NameOfGameObjectScriptAIsAttachedTo"); scriptInstance = tempObj.GetComponent<ScriptA>(); //Access playerScore variable from ScriptA scriptInstance.playerScore = 5; //Call doSomething() function from ScriptA scriptInstance.doSomething(); } }