我在win.cs
中尝试使用不同脚本上的许多函数例如。
team.cs
PlayGame();
score.cs
UpdateScore();
我有一些变量设置为静态,但不是全部,因为它不需要(但是?)
我试图把PlayGame();和UpdateScore();在win.cs.这要求我做一个:
public static void UpdateScore(){}
既然这是静态的,我必须将所有与UpdateScore相关的其他可变数据保持静态,然后代码中断。
有没有更好的方法来做我正在做的事情?
我尝试使用team.PlayGame()作为变量,但这也需要整个静态的东西。
对不起,这有点难以解释。
注意:所有功能都是公开的。
答案 0 :(得分:0)
您只需使用Component.SendMessage从另一个脚本调用脚本方法即可。
来自win.cs
脚本的这样的事情:
team teamScript = GameObject.Find("Object that team script is on that").GetComponent<team>();
teamScript.SendMessage("PlayGame", you parameter);
答案 1 :(得分:0)
如果Win.cs需要在Score.cs上调用UpdateScore,那么你就这样:
public class Win : MonoBehaviour{
[SerializeField]private Score score = null;
private void Start(){
if(this.score == null){
this.score = this.gameObject.GetComponent<Score>();
}
}
// Then you can use this.score.UpdateScore when needed
}
可以使用事件以相反的方式执行相同的操作。
public class Win:MonoBehaviour{
public EventHandler<System.EventArg> RaiseUpdateScore;
protected void OnUpdateScore(EventArg args){
if(RaiseUpdateScore != null){
RaiseUpdateScore(this, args);
}
}
public void SomeAction(){
if(someCondition){
OnUpdateScore(null);
}
}
void OnDestroy(){ RaiseUpdateScore = null; }
}
然后在Score.cs上
public class Score:MonoBehaviour{
private Win win = null;
private void Start(){
this.win = this.gameObject.GetComponent<Win>();
this.win.RaiseUpdateScore += HandleUpdateScore;
}
private void HandleUpdateScore(object sender , System.EventArg args){}
private void OnDestroy(){
if(this.win != null){
this.win.RaiseUpdateScore -= HandleUpdateScore;
}
}
}