Unity c#多功能共享相同的行为?

时间:2016-10-25 01:03:49

标签: c# design-patterns unity3d

在我的游戏中,有很多地方需要在功能完成后播放音频,例如:

import com.coreos.jetcd.EtcdClient;

由于有很多功能需要播放声音,而且每次我都需要添加 class Player{ public AudioClip clip; void WalkToDestination() { //walk code here AudioManager.Play(clip); } } class GameManger{ public AudioClip clip; void AfterCompleteLevel() { //play level completion animation AudioManager.Play(clip); } } 进入课堂,而public AduioSource clip进入体内,有太多的重复性工作。 这有什么好的设计模式吗?

2 个答案:

答案 0 :(得分:2)

定义基类,并在其中放置共享函数:

public class PlayerBase 
{
     protected SomeClass clip;
     public void PlaySound()
     {
         AudioManager.Play(clip);
     }
}

class Player : PlayerBase {}
class GameManger : PlayerBase {}

直接在派生的PlaySound()Player类中调用GameManager

答案 1 :(得分:2)

您可能正在寻找的内容称为Singleton:在使用音频管理器或类似内容时,它们非常有用。

您可以这样声明:

public class YourClassName: MonoBehaviour
{
    public static YourClassName instance;

    public void Awake()
    {
        if (!instance)
        {
            instance = this;
        }
    }

    public void YourMethodToCall()
    {
        //Do what you want here
    }
}

然后从另一个脚本中,您可以使用以下方法访问它:

if (YourClassName.instance)
{
    YourClassName.instance.YourMethodToCall();
}