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 コンポーネントから変数や関数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。