༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻

首先创建一个项目,

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

建基础通用文件夹,

创建一个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.

相关推荐
一丝晨光8 分钟前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
friklogff23 分钟前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net
friklogff2 小时前
【C#生态园】构建你的C#操作系统:框架选择与实践
服务器·开发语言·c#
code bean5 小时前
【C#基础】函数传参大总结
服务器·开发语言·c#
shanshan20996 小时前
上位机系统架构 | 如何设计一个高效的多相机管理系统
c#·wpf·相机
ling1s8 小时前
C#基础(13)结构体
前端·c#
.Net Core 爱好者8 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
云草桑8 小时前
逆向工程 反编译 C# net core
前端·c#·反编译·逆向工程
指尖流烟10 小时前
C#调用图表的使用方法
开发语言·c#
何遇mirror11 小时前
抽象工厂模式(Abstract Factory)
抽象工厂模式