༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻

首先创建一个项目,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第1张图片

在这个初始界面我们需要做一些准备工作,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第2张图片

建基础通用文件夹,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第3张图片

创建一个Plane 重置后 缩放100倍 加一个颜色,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第4张图片

任务:使用工厂方法模式 创建 飞船模型,

首先资源商店下载飞船模型,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第5张图片

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第6张图片

拖拽三种类型飞船模型至unity场景中,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第7张图片

将三种模型完全解压缩后放进自己的Prefabs包,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第8张图片

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第9张图片

在unity场景中删除三个飞船模型,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第10张图片

接下来编写代码:

1.创建脚本【抽象产品类】

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第11张图片

双击AbsShip.cs编写代码:

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第12张图片

using UnityEngine;
public abstract class AbsShip{
    public GameObject Ship { get; set; }
    public abstract void Load();
}
2.创建脚本【具体产品类】

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第13张图片

双击ShipA.cs编写代码:

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第14张图片

using UnityEngine;
public class ShipA : AbsShip{
    public override void Load(){
        Ship = Resources.Load("Prefabs/ship1");
        if (Ship != null)
            Ship = GameObject.Instantiate(Ship, new Vector3(0, 0, 0), Quaternion.identity);
    }
}
3.创建脚本【工厂方法类】

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第15张图片

public abstract class AbsFactory{
    public abstract AbsShip GetShip(string type);
}
public class Factory : AbsFactory{
    public override AbsShip GetShip(string type){
        AbsShip ship;
        switch (type){
            case "shipA":
                ship = new ShipA();
                break;
            default:
                ship = null;
                break;
        }
        return ship;
    }
}

4.创建脚本【主类】

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第16张图片

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第17张图片

using UnityEngine;
public class Main : MonoBehaviour{
    public AbsShip ship;
    public string type;
    void Start(){
        AbsFactory shipFactory = new Factory();
        ship = shipFactory.GetShip("shipA"); 
        if (ship != null)
            ship.Load(); 
        else
            Debug.LogError("空引用");
    }
}
回到unity中修改预制体文件名为ship1

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第18张图片

将Main类挂载在地面Plane上,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第19张图片

运行项目即可生成ship1飞船,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第20张图片

如果需要拓展,添加ShipB具体产品类,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第21张图片

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第22张图片

using UnityEngine;
public class ShipB : AbsShip{
    public override void Load(){
        Ship = Resources.Load("Prefabs/ship2");
        if (Ship != null)
            Ship = GameObject.Instantiate(Ship, new Vector3(3, 0, 0), Quaternion.identity);
    }
}

只需修改工厂类,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第23张图片

public abstract class AbsFactory{
    public abstract AbsShip GetShip(string type);
}
public class Factory : AbsFactory{
    public override AbsShip GetShip(string type){
        AbsShip ship;
        switch (type){
            case "shipA":
                ship = new ShipA();
                break;
            case "shipB":
                ship = new ShipB();
                break;
            default:
                ship = null;
                break;
        }
        return ship;
    }
}

运行项目即可完成,

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻_第24张图片

End.

你可能感兴趣的:(工厂方法模式,3D游戏,unity,1024程序员节)