工廠模式:以食物生產為例
1. 一個生產食物的工廠(此項 需要建立兩個類:食物基類<Food>,工廠類<Factory>)
2. 可以生產不同的食物(此項 建立食物的具體子類,均繼承食物的基類)
3. 運行程序生成不同的食物(此項 建立程序運行的主類 繼承魚MonoBehaviour,創建工廠類變量、食物基類變量,然后再Start方法里給食物基類變量賦值<通過傳入參數的不同 將父類指向一個子類>)
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 測試工廠模式 /// </summary> // 創建實物的基類 public class Food { public virtual void ShowMe () { Debug.Log ("這是實物基類"); } } // 西紅柿類 public class TomatoFood:Food { public override void ShowMe () { // 掉父類方法 base.ShowMe (); Debug.Log ("TomatoFood"); } } // 雞蛋 public class EggFood:Food { public override void ShowMe () { base.ShowMe (); Debug.Log ("EggFood"); } } public class Factory { public Food MakeFood (string name) { if (name == "egg") { return new EggFood (); } else if (name == "tomato") { return new TomatoFood (); } return null; } } public class Main : MonoBehaviour { Factory factory = new Factory (); Food food1; Food food2; public void Start () { food1 = factory.MakeFood ("egg"); food1.ShowMe (); food2 = factory.MakeFood ("tomato"); food2.ShowMe (); } }
以Resources加載游戲物體為例
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SpriteFactory : MonoBehaviour { public Object[] allSprit; private int allIndex = 0; private Transform canvasTransform; /// <summary> /// 加載 Resources 文件夾下的資源 /// </summary> void Start () { canvasTransform = GameObject.Find ("Canvas").transform; LoadSprite ("Number"); } void Update () { if (Input.GetKeyDown (KeyCode.A)) { allIndex++; GameObject tempObj = GetImage (allIndex); tempObj.transform.parent = canvasTransform; tempObj.transform.position = new Vector3 (allIndex * 50, 0, 0); } } /// <summary> /// 加載Resources文件夾下指定名稱的資源 /// </summary> /// <param name="name">指定名稱</param> public void LoadSprite (string name) { allSprit = Resources.LoadAll (name); } /// <summary> /// 加載指定索引的資源,並把該資源顯示出來 /// </summary> /// <returns>返回一個新生成的物體,該物體顯式剛剛加載的資源</returns> /// <param name="index">給出要加載資源的一個索引</param> public GameObject GetImage (int index) { GameObject tempObj = new GameObject ("tempObj"); Image tempImage = tempObj.AddComponent<Image> (); tempImage.sprite = allSprit [index] as Sprite; return tempObj; } }