如何从另一个脚本访问脚本中的对象

How to access an object in a script from another script

我这里有 3 个脚本,第一个是 Weapon,第二个是我创建了一些 Weapon 对象的脚本,第三个是我想使用第一个脚本中的方法 Setid() 来更改第二个脚本:

第一个脚本(未附加到任何对象)

public class Weapon : MonoBehaviour
{
    private int id;
    public Weapon(int id)
    {
        this.id = id;
        
    }
    public int Getid() { return id; }
    public void Setid(int id) { this.id = id; }
}

第二个脚本:在父玩家下附加一个对象

public class GunController : MonoBehaviour
{   
    Dictionary<int, Weapon> Loadout= new Dictionary<int, Weapon>();

    Weapon STG44 = new Weapon(0);
    Weapon AK74 = new Weapon(1);
    Weapon AA12 = new Weapon(2);
    Weapon MiniGun = new Weapon(3);
private void Start()
    {
        Loadout.Add(0, STG44);
        Loadout.Add(1, AK74);
        Loadout.Add(2, AA12);
        Loadout.Add(3, MiniGun);
       ;


    }
}

附加到不同对象但相同父对象的第三个脚本:

    public class PickUpWeapon : MonoBehaviour
    {
        public GameObject PressE;
        public bool Triggered;
        private void Start()
        {
            PressE.SetActive(false);
        }
        void OnTriggerEnter(Collider collision)
        {
            if(collision.CompareTag("Box"))
            {
                PressE.SetActive(true);
                Triggered = true;
            }
        }
        void OnTriggerExit(Collider collision)
        {
            PressE.SetActive(false);
            Triggered = false;
        }
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.E) && Triggered)
            {
                Debug.Log("s");
//need to call Setid(5) here for the object AK74 from the 2nd script
            }
        }

为此,只需在您的第 3 个脚本中引用第 2 个脚本,例如所以:

GunController myRef = theObjectThatThe2ndScriptIsSittingOn.getComponent<GunController>();

然后使用 myRef 您可以访问此脚本中 public 的任何内容,

为此,您 CALLING/ACCESING 的变量需要 PUBLIC

myRef.AK47.setId(5);
//OR
myRef.Loadout[1].setId(5);

此外:除非您需要从 1. 脚本中的 MonoBehaviour 继承,否则我会删除它。

也许这可以帮助您了解 Unity 中静态脚本的工作原理: link01 link02