首先创建一个项目,
在这个初始界面我们需要做一些准备工作,
建基础通用文件夹,
创建一个Plane 重置后 缩放100倍 加一个颜色,
任务:使用 抽象工厂模式 创建 人物与宠物 模型,
首先资源商店下载 人物与宠物 模型,
拖拽至场景中,并完全解压缩
重命名为Role1放进自己的预制体包Prefabs后在场景中删除,
同样手法下载宠物模型最后放进自己的预制体包Prefabs中,
接下来编写代码:
1.创建脚本【抽象产品类之人物类】
双击AbsRole.cs编写代码:
using UnityEngine;
public abstract class AbsRole{
public GameObject Role { get; set; }
public abstract void Load();
}
2.创建脚本【具体产品类之人物类】
双击RoleA.cs编写代码:
using UnityEngine;
public class RoleA : AbsRole{
public override void Load(){
Role = Resources.Load<GameObject>("Prefabs/role1");
if (Role != null)
Role = GameObject.Instantiate(Role, new Vector3(0, 0, 0), Quaternion.identity);
}
}
3.创建脚本【抽象工厂类】
public abstract class AbstractFactory{
public abstract AbsRole GetRole(string type);
}
public class Factory : AbstractFactory{
public override AbsRole GetRole(string type){
AbsRole role;
switch (type){
case "RoleA":
role = new RoleA();
break;
default:
role = null;
break;
}
return role;
}
}
4.创建脚本【主类】
using UnityEngine;
public class Main : MonoBehaviour{
public AbsRole role;
public string type;
void Start(){
AbstractFactory roleFactory = new Factory();
role = roleFactory.GetRole("RoleA");
if (role != null)
role.Load();
else
Debug.LogError("空引用");
}
}
回到unity中将主类Main类挂载在地面上Plane,
运行即生成,
接下来添加宠物类,抽象工厂真正用到的地方,
创建脚本:
using UnityEngine;
public abstract class AbsPet{
public GameObject Pet { get; set; }
public abstract void Load();
}
创建脚本:
using UnityEngine;
public class PetA : AbsPet{
public override void Load(){
Pet = Resources.Load<GameObject>("Prefabs/pet1");
if (Pet != null)
Pet = GameObject.Instantiate(Pet, new Vector3(3, 0, 0), Quaternion.identity);
}
}
修改脚本:
public abstract class AbstractFactory{
public abstract AbsRole GetRole(string type);
public abstract AbsPet GetPet(string type);
}
修改脚本:
public class Factory : AbstractFactory{
public override AbsPet GetPet(string type){
AbsPet pet;
switch (type){
case "PetA":
pet = new PetA();
break;
default:
pet = null;
break;
}
return pet;
}
public override AbsRole GetRole(string type){
AbsRole role;
switch (type){
case "RoleA":
role = new RoleA();
break;
default:
role = null;
break;
}
return role;
}
}
修改主类:
using UnityEngine;
public class Main : MonoBehaviour{
public AbsRole role;
public AbsPet pet;
public string type;
void Start(){
AbstractFactory roleFactory = new Factory();
role = roleFactory.GetRole("RoleA");
if (role != null)
role.Load();
else
Debug.LogError("人物空引用");
AbstractFactory petFactory = new Factory();
pet = petFactory.GetPet("PetA");
if (pet != null)
pet.Load();
else
Debug.LogError("宠物空引用");
}
}
运行项目即完成,
End.