0

Unity3d と C# を使用しており、次の 2 つのスクリプトがあります。

スクリプト 1:

using UnityEngine;
using System.Collections;

public class PlayerAttack : MonoBehaviour {

    public GameObject target;

    // Update is called once per frame
    void Update () {

        if(Input.GetKeyUp(KeyCode.F))
        {
            Attack();
        }
    }
     void Attack() {
        EnemyHealth eh = (EnemyHealth)target.GetComponent("EnemyHealth");
        eh.HealthRulse(-10);
    }

}

スクリプト 2:

using UnityEngine;
using System.Collections;

public class EnemyHealth : MonoBehaviour {
public int curHealth = 100;
public int maxHealth = 100;
public float healthBarLeangth;
    // Use this for initialization
    void Start () {
    healthBarLeangth = Screen.width / 2;
    }

    // Update is called once per frame
    void Update () {
         HealthRulse(0);
    }
    void OnGUI() {
        GUI.Box(new Rect(10,40,Screen.width / 2 / (maxHealth / curHealth),20),curHealth + "/" + maxHealth);
    }
    void HealthRulse(int adj){
        if ( curHealth < 0)
            curHealth = 0;
        if (curHealth > maxHealth)
            curHealth = maxHealth;
        if(maxHealth < 1)
            maxHealth = 1;

        curHealth += adj;
        healthBarLeangth = (Screen.width / 2) * (curHealth / (float)maxHealth);
    }
}

「スクリプト 2」で定義され、GetComponent によって「スクリプト 1」で呼び出された関数「HeathRulse()」がエラーをスロー
しています - 「保護レベルのため、メソッドにアクセスできません」

私はそれについて助けが必要です...

4

1 に答える 1

5

アクセス修飾子を定義していないため、メソッドはプライベートであるため、クラスHealthRulse外からアクセスすることはできませんEnemyHealth

入れ子になったクラスと構造体を含む、クラス メンバーと構造体メンバーのアクセス レベルは、既定ではプライベートです。ネストされたプライベート型は、それを含む型の外部からはアクセスできません

定義を次のように変更します

public void HealthRulse(int adj)
于 2013-07-01T15:29:03.343 に答える