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

首先创建一个项目,

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

建基础通用文件夹,

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

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

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

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

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

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

接下来编写代码:

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

双击AbsShip.cs编写代码:

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

双击ShipA.cs编写代码:

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

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.创建脚本【主类】

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

将Main类挂载在地面Plane上,

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

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

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

只需修改工厂类,

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;
    }
}

运行项目即可完成,

End.

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

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

相关文章

《区块链简易速速上手小册》第6章:区块链在金融服务领域的应用(2024 最新版)

文章目录 6.1 金融服务中的区块链6.1.1 金融服务中区块链的基础6.1.2 主要案例&#xff1a;跨境支付6.1.3 拓展案例 1&#xff1a;去中心化金融&#xff08;DeFi&#xff09;6.1.4 拓展案例 2&#xff1a;代币化资产 6.2 区块链在支付系统中的作用6.2.1 支付系统中区块链的基础…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

专业数据治理:数据中台系统塑造企业未来的数字化运营管理新秩序

随着信息化进程的快速推进&#xff0c;数据已然成为企业最为宝贵的资产。对于众多企业而言&#xff0c;如何有效整合、治理以及充分利用这些数据&#xff0c;使之成为推动业务发展的引擎&#xff0c;成为当前难题。数据中台应运而生&#xff0c;它被认为是企业数字化转型的至关…

元素的显示与隐藏,精灵图,字体图标,CSSC三角

元素的显示与隐藏 类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现 本质&#xff1a;让元素在页面中隐藏或者显示出来。 1.display显示隐藏 2.visibility显示隐藏 3.overflow溢出显示隐藏 1.display属性&#xff08;…

远EC600E-CN LTE Standard模块硬件设计手册

EC600E-CN是一款LTE-FDD、LTE-TDD无线通信模块&#xff0c;支持LTE-FDD和LTE-TDD数据连接&#xff0c;可为客户在特定场景应用中提供语音功能。 模块封装紧凑&#xff0c;仅为22.9mm21.9mm2.4mm&#xff0c;能满足大部分M2M应用需求&#xff0c;例如自动化领域、智能计量、跟踪…

IP网络对讲系统高清可视寻呼话筒管理中心主机10寸大屏有线呼叫器监狱看守所监狱收费站可视对讲系统

SV-2017P网络可视话筒产品简介 产品特点 专业寻呼主机外形&#xff0c;桌面式设计&#xff0c;采用10.1寸高清IPS屏幕&#xff0c;分辨率1280*720&#xff0c;全虚拟按键加实体按键&#xff0c;外形美观大方&#xff1b;采用工业级4核嵌入式CPU芯片1G内存&#xff0c;保证系统…

arcgis自定义dem高程实现地形抬高 - 操作矢量,转tin、adf(tif),cesiumlab切高程服务

这次记录分享一下arcgis自定义高程全过程 /(ㄒoㄒ)/~~ 我的场景&#xff1a;前端实现地面抬高效果 自定义高程实现地形抬高 一、数据处理 - arcgis操作矢量1、准备工作&#xff08;可选&#xff09;2、绘制外围矢量&#xff08;可选&#xff09;3、操作矢量数据 二、创建tin - …

VUE PC端可拖动悬浮按钮

一、实现效果&#xff1a; 二、FloatButton.vue <template><div><div class"sssss"><div class"callback float" mousedown"down" touchstart"down" mousemove"move" touchmove"move" mous…

C语言——柔性数组

柔性数组概念&#xff1a; 这个概念你可能没听说过&#xff0c;但是这个概念确实存在&#xff0c;在C99中&#xff0c;结构体中最后一个成员允许是未知大小的数组&#xff0c;这就叫做【柔性数组】成员。 struct S {char c;int i;int arr[0];//未知大小的数组 - 柔性数组成员 }…

Java项目:基于SSM框架实现的西安旅游管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm811基于SSM框架实现的西安旅游管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

Portainer访问远程Docker (TLS加密)

前言&#xff1a; docker的2375端口&#xff0c;出于安全性考虑即(Docker Remote API未授权访问漏洞)&#xff0c;是不开放的&#xff0c;如果想要管理远程docker&#xff0c;可以使用TLS机制来进行访问&#xff0c;这里以Portainer访问连接为例 文章参考&#xff1a;https://b…

单机搭建hadoop环境(包括hdfs、yarn、hive)

单机可以搭建伪分布式hadoop环境&#xff0c;用来测试和开发使用&#xff0c;hadoop包括&#xff1a; hdfs服务器 yarn服务器&#xff0c;yarn的前提是hdfs服务器&#xff0c; 在前面两个的基础上&#xff0c;课可以搭建hive服务器&#xff0c;不过hive不属于hadoop的必须部…

MacBook安装软件时允许任何来源的软件

MacBook安装软件时允许任何来源的软件 临时设置允许未知来源的app 当下载网上的软件并安装时,会安装失败, 因为MacOS默认只允许安装App Store上的软件 这时可以临时允许安装,如下设置 开启设置—->安全性与隐私—->未知来源的app 这种方式比较安全 设置允许任何来源…

计算机毕业设计 | SpringBoot 房屋租赁网 房屋租赁平台(附源码)

1&#xff0c;绪论 1.1 背景调研 在房地产行业持续火热的当今环境下&#xff0c;房地产行业和互联网行业协同发展&#xff0c;互相促进融合已经成为一种趋势和潮流。本项目实现了在线房产平台的功能&#xff0c;多种技术的灵活运用使得项目具备很好的用户体验感。 这个项目的…

2024年美国大学生数学建模比赛MCM问题A:资源可用性和性别比例-思路解析与代码解答

2024 MCM Problem A: Resource Availability and Sex Ratios 一、题目翻译 背景 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。…

【A题完整论文】2024美赛完整论文+代码参考(无偿分享)

A题&#xff1a;资源可用性和性别比例 一、问题分析 1.1 问题一分析 针对该问题&#xff0c;若七鳃鮼的性别比例受到外部环境因素的影响&#xff0c;那么这可能会导致种群大小和结构的变化。如果雌性在某些环境条件下更为优势&#xff0c;种群的增加可能对其他物种的竞争和资源…

闲聊电脑(4)硬盘分区

夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;分区么&#xff0c;就是分…

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中&#xff0c;人们常常会遇到各种优化问题。例如&#xff0c;在生产经营中&#xff0c;我们总是希望制定最优的生产计划&#xff0c;充分利用已有的人力、物力资源&#xff0c;获得最大的经济效益&#…

半桥式三相无刷直流电动机不同导通角的性能的变化

半桥式三相无刷直流电动机不同导通角的性能的变化 syms Omega clear clcOmega0pi/180*120 for Omega_x[pi/180*120,pi/180*130,pi/180*140,pi/180*150,pi/180*160,pi/180*170,pi/180*180]Omega_x*180/piOmega_x_0 (4*sin(Omega_x/2)/(Omega_xsin(Omega_x)))/(4*sin(Omega0/2)/…

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录 使用gcc/ggcc如何完成编译后生成可执行文件&#xff1f;预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;连接&#xff08;生成可执行文件或库文件&#xff09;最后记忆小技巧 在这里涉及到一个重要的概念&…