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

首先创建一个项目,

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

建基础通用文件夹,

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/362003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

huggingface打不开,解决方法

解决方法 将 https://huggingface.co/hustvl/Vim-tiny替换成 https://hf-mirror.com/hustvl/Vim-tiny文章目录 解决方法摘要YoloV8改进策略&#xff1a;基于分层注意力的FasterViT&#xff0c;让YoloV8实现性能的飞跃YoloV8改进策略&#xff1a;InceptionNext主干替换YoloV8…

第九节HarmonyOS 常用基础组件21-ImageAnimator

1、描述 提供帧动画组件来实现逐帧播放图片的能力&#xff0c;可以配置需要播放的图片列表&#xff0c;每张图片可以配置时长。 2、接口 ImageAnimator() 3、属性 参数名 参数类型 描述 images Array<ImageFrameInfo> 设置图片帧信息集合&#xff0c;每一帧的帧…

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…

二叉树-堆应用(1)

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆&#xff08;直…

android远程投屏应用

客户端app地址&#xff1a;https://gitee.com/youzilzk/blue1.git 服务端地址&#xff1a;https://gitee.com/youzilzk/blue-server1.git 一。服务端部署 1.安装postgres 2.导入项目下blue.sql文件 3.修改配置application.properties和config.properties&#xff0c;其中applic…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

人工智能福利站,初识人工智能,机器学习,第三课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

备战蓝桥杯---数据结构与STL应用(优先队列的小细节)

很显然&#xff0c;我们先二分求X,对于验证&#xff0c;一开始我先想的是直接求每个的不足电量再除充电量后向上取整&#xff0c;然后判断与k的大小关系。事实上&#xff0c;如果让k很大&#xff0c;若有两只手机在下一刻多没电&#xff0c;显然上述方法得出的结论是错误的&…

Java的常见api以及异常情况-1

目录 1、什么是API &#xff1f; 2、Object类 3、equals方法 4、内存中的比较方法 5、instanceof 关键字 1、什么是API &#xff1f; 1.API(Application ProgrammingInterface,应用程序编程接口)2.Java中的API 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将…

前端JavaScript篇之实现一个将多维数组展示的方法有哪些,分别是?

目录 实现一个将多维数组展示的方法有哪些&#xff0c;分别是&#xff1f;方法一&#xff1a;递归展开成一维数组方法二&#xff1a;嵌套展示结构方法三&#xff1a;ES6新增的数组扩展方法 flat()方法四&#xff1a;apply() 结合 concat() 使用以展开成一维数组方法五&#xff…

快速排序|超详细讲解|入门深入学习排序算法

快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是&#xff1a;选择一个基准数&#xff0c;通过一趟排序将要排序的数据分割成独立的两部分&#xff1b;其中一部分的所有数据都比另外一部分的所有数据都要小。然后&#xff0c;再按此方法对这两部分数据分别进…

低密度奇偶校验码LDPC(五)——译码算法概述

一、译码算法概述 二、置信传播原理 Bayesian点兵问题 Turbo原理

【CSS3】flex布局实践篇 | 7种常见网页布局方案

1、垂直居中 垂直居中一度是前端面试时必问知识点。 目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧&#xff0c;包括全高的伪元素。这些方法是又复杂又难写。 不知道大家第一次使用flex布局做什么&#xff0c;反正我是用来做垂直居中&#xf…

2023 IoTDB Summit:华润电力技术研究院副院长郭为民《新型时序数据库在智能发电领域的应用探索与展望》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

【python】在python中使用单元测试unittest

在python中使用单元测试unittest 大家好&#xff0c;欢迎来到我的技术乐园&#xff01;今天&#xff0c;我们将一起踏入Python单元测试的奇妙旅程&#xff0c;探索这个让我们的代码更可靠、更强壮的令人愉快的世界。 前言&#xff1a;为什么单元测试如此重要&#xff1f; 在我…

分布式搜索引擎_学习笔记_2

分布式搜索引擎_学习笔记_2 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用…

探索微服务治理:从发展到实践构建高效稳定的系统|服务注册与发现技术解析

随着软件行业的不断发展&#xff0c;微服务架构凭借其高度的灵活性、可扩展性和可维护性&#xff0c;逐渐成为企业应用的主流架构风格。然后微服务架构的复杂性也带来了一系列的挑战&#xff0c;其中之一就是如何有效地管理和治理微服务。本文灸哥给你详细介绍和服务治理相关的…

Python笔记(二)—— Python判断语句

2.1 布尔类型和比较运算符 布尔类型用于表示&#xff1a;真和假 比较运算符用于计算&#xff1a;真和假 1. 布尔&#xff08;bool&#xff09;表示现实生活中的逻辑&#xff0c;即真和假 True表示真False表示假 True本质上是一个数字记作1&#xff0c;False记作0 定义变…

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中&#xff0c;界面通常都是动态的。下图所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…