如何从另一个脚本访问脚本中的对象
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 继承,否则我会删除它。
我这里有 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 继承,否则我会删除它。