访问多个脚本之间的变量以在Unity3D中进行松散耦合

时间:2018-10-09 11:30:29

标签: c# unity3d design-patterns

例如,假设我们在一个脚本中有一个health变量,并且想要访问UI脚本中的此变量以显示健康状况,另一方面要根据健康程度来更改声音的音调。 我知道一些访问此变量的方法,但是它们彼此之间高度依赖。像GetComponent,Singelton甚至C#事件一样。 我想知道是否有任何模式可以减少这些依赖性? (同样高效且高效)

编辑: 我想到了这个事件系统,但是我认为它具有一些依赖关系,可以删除这些依赖关系,但是我不知道如何,并且我不确定它及其性能。

public class Player {
    public class HealthEventArgs : EventArgs {
        public int currentHealth;
        public HealthChangedEventArgs(int currentHealth) {
            this.currentHealth = currentHealth;
        }
    }

    public static event EventHandler<HealthEventArgs> HealthEvent;

    public void NotifyHealthChanged(int health) {
        if(HealthEvent != null) {
            HealthEvent.Invoke(this, new HealthEventArgs(health));
        }
    }
}

public class OtherClass {
    public void SubscribeToPlayerHealthEvent() {
        Player.HealthEvent += Foo;
    }

    public void UnsubscribeFromPlayerHealthEvent() {
        Player.HealthEvent -= Foo;
    }

    public void Foo(object o, HealthEventArgs e) {
        //Do something with e.currentHealth
    }
}

2 个答案:

答案 0 :(得分:0)

在@julxzs和我聊天之后...

对最佳做法做了一些检查...我发现了

link

所以事实证明,单例是可行的方法,请查看页面,了解很多不错的信息! thx @julxzs

答案 1 :(得分:0)

看看依赖注入技术。 我可以建议从Zenject开始。