1. 程式人生 > >萬能遊戲框架(一)——設計模式之工廠模式

萬能遊戲框架(一)——設計模式之工廠模式

設計模式

一、工廠模式:所有的物件的創造,都有一個物件去創造

1.一個簡單的工廠模式的例子

public class Food
{
    public virtual void ShowMe()
    {
        
    }
}

public class TomatoFood:Food
{
    public override void ShowMe()
    {
         base.ShowMe();
         Print("TomatoFood");
    }
}

public class EggFood:Food
{
    public override void
ShowMe()
{ base.ShowMe(); Print("EggFood"); } } public class Factory { public Food ShowFactory(string name) { if(name=="egg") { return new EggFood(); } else if(name=="tomato") { return new TomatoFood(); } } } public
class Main { public void MainShow() { Factory temFactory=new Factory(); Food tmpFood =temFactory.ShowFactory("egg"); temFood.ShowMe(); Food tmpFood2 =temFactory.ShowFactory("tomato"); temFood2.ShowMe(); } }

2.工廠模式在Unity中的應用

一個圖片包含著多張圖片的情況下,可以進行如下的處理:

  1. 在Inspector中,將Texture Type改成Sprite(2D and UI),Sprite Mode改成Multiple,再點選Sprtie Editor按鈕進行切割,如下圖所示

 

  1. 建立C#指令碼SpriteFactory,程式碼如下,運用工廠模式
public class SpriteFactory:MonoBehaviour
{
    public Object[] allSprite;
    
    //載入所有的資源
    void Start()
    {
        allSprite = Resources.LoadAll("Number");
    }
    
    //工廠方法
    public GameObject GetImage(int index)
    {
        GameObject temObj = new GameObject("tmpGame");
        
        Image tmpImage = tmpObj.AddComponent<Image>();
        
        tmpImage.sprite = allSprite[index] as Sprite;
        
        return temObj;
    }
    
    //計數器
    int allIndex = 0;
    
    void Update()
    {
        if(Input.GetKeyDown(keyCode.A))
        {
            //計數器自加1,並生成對應的物件
            allIndex++;
            GameObject temObj = GetImage(allIndex%9);
            
            //新生成的Sprite物件的transform設定為掛載此指令碼的物體的transform,後再修改其位置
            temObj.transform.parent = transform;
            temObj.transform.position = new Vector3(allIndex*2,0,0);
        }
    }
}
  1. 可將上訴內容形成一個新的功能類,程式碼如下
public void LoadSprite(string name)
{
    allSprite = Resources.LoadAll(name);
}

public GameObject GetSprite(int index)
{
    GameObject temObj = new GameObject("tmpGame");
        
        Image tmpImage = tmpObj.AddComponent<Image>();
        
        tmpImage.sprite = allSprite[index] as Sprite;
        
        return temObj;
}

3.小結

工廠模式的流程圖