༺༽༾ཊ—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.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终于搞懂了网盘网页是怎么唤醒本地应用了

写在前面 用百度网盘举例,可以通过页面打开本机的百度网盘软件,很多软件的网站页面都有这个功能。这个事情一直令我比较好奇,这次终于有空抽时间来研究研究了,本篇讲的是Windows的,mac的原理与之类似。 自定义协议 本身单凭浏览器是没有唤醒本地应用这个能力的,不然随…

幻兽帕鲁(Palworld)v0.1.3免安装中文版(下载及配置中文及服务器搭建)

配置中文 进入到游戏文件夹中 Palworld.v0.1.3.0\game\Engine\Binaries\ThirdParty\Steamworks\Steamv153\Win64\steam_settings设置中文 simplified chinesewindows搭建服务器 要求 中央处理器4核&#xff08;推荐&#xff09;内存16千兆字节&#xff08;GB&#xff09; …

PyTorch 深度学习实践 第3讲 梯度下降算法

B站--刘二大人《PyTorch深度学习实践》完结合集 03. 梯度下降算法 PPT 链接&#xff1a;网盘 提取码&#xff1a;cxe4 步骤&#xff1a;1.dataset 2.model 3.training&#xff08;确定权重&#xff09; 4.inferring 1.分治法 容易只找到局部最优&#xf…

1 计算机网络概述(二):计算机网络的拓扑结构,标准化组织

目录 1 计算机网络的拓扑结构1.1 网络拓扑的概念1.2 通信子网的信道类型1、点到点式网络2、广播式网络 1.3 常见的计算机网络拓扑结构 2 网络协议和标准化组织2.1 网络协议2.2 标准化组织 1 计算机网络的拓扑结构 1.1 网络拓扑的概念 拓扑学由图论演变而来&#xff0c;在拓扑…

如何保证MySQL数据一致性

在当今大数据时代&#xff0c;数据库系统扮演着至关重要的角色&#xff0c;而MySQL作为一种流行的关系型数据库管理系统&#xff0c;在数据一致性方面拥有着丰富的机制和技术。下面简单的探讨MySQL是如何保证数据一致性的。 事务与ACID特性 要了解MySQL如何保证数据一致性&am…

postman用法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、postman怎么使用json输出 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…

C++ 数论相关题目:高斯消元解异或线性方程组

输入一个包含 n 个方程 n 个未知数的异或线性方程组。 方程组中的系数和常数为 0 或 1 &#xff0c;每个未知数的取值也为 0 或 1 。 求解这个方程组。 异或线性方程组示例如下&#xff1a; M[1][1]x[1] ^ M[1][2]x[2] ^ … ^ M[1][n]x[n] B[1] M[2][1]x[1] ^ M[2][2]x[2]…

部署TOMCAT详解

目录 一、Tomcat概述 1.1Tomcat简介 1.2、Tomcat历史 1.3Tomcat官网 二、部署单实例Tomcat 1.下载Tomcat包 2. 解压Tomcat包 3.配置环境变量 4.刷新环境变量 5.查看tomcat是否安装成功 6.启动Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2.webapps目录介绍 3…

【国产MCU】-CH32V307-GPIO控制-外部中断

GPIO控制-外部中断 文章目录 GPIO控制-外部中断1、CH32V307中断介绍2、GPIO外部中断相关API3、外部中断使用代码实现CH32V3x 系列内置可编程快速中断控制器(PFIC– Programmable Fast Interrupt Controller),最多支持255 个中断向量。当前系统管理了88 个外设中断通道和8 个…

Java面试题之 IO(三)

Java面试题之 IO&#xff08;三&#xff09; 文章目录 Java面试题之 IO&#xff08;三&#xff09;字节缓冲流BufferedInputStream&#xff08;字节缓冲输入流&#xff09;BufferedOutputStream&#xff08;字节缓冲输出流&#xff09; 字符缓冲流打印流 文章来自Java Guide 用…

TCP/IP网络模型

大家好我是苏麟 , 今天聊聊TCP/IP四层网络模型 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 应用层 最上层的&#xff0c;也是我们能直接接触到的就是应用层&#xff08;Application Layer&#xff09;&#xff0c;我们电脑或手机使用的应用软件都…

ElasticSearch面试题整理(持续更新)

1. Elasticsearch 中的倒排索引是什么&#xff1f; Elasticsearch 使用一种称为倒排索引的结构&#xff0c;ES中的倒排索引其实就是 lucene 的倒排索引&#xff0c;区别于传统的正向索引&#xff0c;倒排索引会再存储数据时将关键词和数据进行关联&#xff0c;保存到倒排表中&…

Redis持久化策略指南,如何根据业务需求选择合适的方案

推荐一款我一直在用国内很火的AI网站&#xff0c;包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型&#xff0c;支持PC、APP、VScode插件同步使用&#xff0c;点击链接跳转->海鲸AI-自动生成代码 前言 Redis是一个被广泛使用的内存数据结构存储系统&#xff0c;它支…

1、PDManer 快速入门

文章目录 序言一、快速入门1.1 PDMan 介绍1.2 特点1.3 下载和安装 小结 序言 本人长期以来一直从事于应用软件的研发以及项目实施工作&#xff0c;经常做数据库建模&#xff08;数据表设计&#xff09;。有一款称心如意的数据库建模工具&#xff0c;自然能够事半功倍&#xff0…

JDK8新增的接口方法

第一种是默认方法&#xff1a; public interface A {//1.默认方法&#xff1a;必须使用default修饰&#xff0c;默认会被public修饰public default void test1(){System.out.println("默认方法");} } 默认方法就是实例方法&#xff0c;必须使用对象触发访问&#x…

洛谷C++简单题小练习day8—Bookshelf B

day8--Bookshelf B--1.30 习题概述 题目描述 Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架&#xff0c;尽管它是如此的大&#xff0c;但它还是几乎瞬间就被各种各样的书塞满了。现在&#xff0c;只有书架的顶上还留有一点空间。 所有(1≤N≤20,000) N头奶牛都有一…

python爬虫概念及介绍

1. 什么是互联网爬虫&#xff1f; 解释 1 &#xff1a;通过一个程序&#xff0c;根据 Url ( http : // www . taobao . com ) 进行爬取网页&#xff0c;获取有用信息 解释 2&#xff1a;使用程序模拟浏览器&#xff0c;去向服务器发送请求&#xff0c;获取响应信息 2. 爬虫核…

JAVAEE初阶 网络编程(八)

IP协议 认识IP协议 在认识IP协议之前&#xff0c;我们首先要明确IP协议的工作范围或者是用途。 &#xff08;1&#xff09; 地址管理&#xff1a;使用一套地址体系&#xff0c;来描述互联网上各个设备所处的为止。 &#xff08;2&#xff09; 路由选择&#xff1a;数据包如何从…

@Test Annotation属性– enabled attribute

目录 而不使用enabled属性 现在&#xff0c;使用enabled属性 我们可以使用enabled属性来忽略类中的所有情况吗&#xff1f; Test注解有很多属性&#xff0c;enabled也是其中之一。在这篇文章中&#xff0c;我们将详细讨论enabled属性。 enabled属性有什么作用&#xff1f;当…

延伸与应用(三)婚姻与经济、运动、宗教、科技与经济

53&#xff0e;幸福婚姻的经济ABC方程式 夫以信先其妇&#xff0c;则妇以信顺其夫。上秉常以化下&#xff0c;下服常而应上&#xff0c;其不化者&#xff0c;百未有一也。 ——《傅子》&#xff0c;傅玄&#xff08;217—278&#xff09; 在现代的小家庭中&#xff0c;由于家庭…