在Unity中存取不同組件的變數和函數
在Unity中,存取其他腳本中的變數和函數是很常見的需求。預設情況下,腳本中的變數和函數是私有的,無法從腳本外部存取。要允許其他腳本存取它們,需要將它們設定為公共的。
例如,考慮一個包含玩家和敵人的場景,每個都有自己的腳本(Character_Stats和Enemy_Stats)。在這種情況下,從Character_Stats腳本存取Enemy_Stats腳本的Health變數需要變通方法,如下面的程式碼所示:
<code class="language-c#">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); } } }</code>
將變數和函數設定為公共的
為了避免這種變通方法,請將要從其他腳本存取的Health變數和任何函數設定為公共的。以下是操作方法:
<code class="language-c#">public class Enemy_Stats : MonoBehaviour { public float Health; void Start() { } public void TakeDamage(float damage) { Health -= damage; } }</code>
存取公共變數和函數
現在,您可以使用Find和GetComponent函數從另一個腳本存取Health變數並呼叫TakeDamage函數:
<code class="language-c#">public class Character_Stats : MonoBehaviour { GameObject enemyObj; Enemy_Stats enemyStats; void Start() { enemyObj = GameObject.Find("EnemyGameObject"); enemyStats = enemyObj.GetComponent<Enemy_Stats>(); } void AttackEnemy() { enemyStats.TakeDamage(AttackDamage); if (enemyStats.Health <= 0) { Destroy(enemyObj); } } }</code>
透過將變數和函數設定為公共的,您可以輕鬆地從其他腳本存取和操作它們,從而節省Unity專案中的時間和精力。
以上是如何從不同的Unity元件存取變數和函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!