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

首先创建一个项目,

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

建基础通用文件夹,

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

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

相关文章

2024年1月的论文推荐

又到月底了&#xff0c;在月初推荐论文的基础上又整理了10篇推荐阅读的论文 1、MosaicBERT https://mosaicbert.github.io/ 一种用于快速预训练的双向编码器。MosaicBERT是针对快速预训练优化的自定义BERT架构。主要架构修改:FlashAttention, ALiBi&#xff0c;门控线性单元…

outlook如何群发邮件?外贸邮件群发教程?

outlook邮箱群发邮件方法&#xff1f;outlook怎么设置邮件群发&#xff1f; 如果你正在使用Outlook&#xff0c;那么你一定想要知道如何有效地群发邮件。Outlook作为微软办公套件的一部分&#xff0c;不仅功能强大&#xff0c;而且操作简便。下面&#xff0c;蜂邮EDM就来详细讲…

Redis的应用问题

目录 一、缓存穿透 问题描述 解决方案 缓存击穿 问题描述 解决方案 缓存雪崩 问题描述 解决方案 二、分布式锁 问题描述 解/决方案&#xff1a;使用redis实现分布式锁 优化之设置锁的过期时间 优化之UUID防误删 LUA脚本保证删除的原子性 LUA脚本 LUA脚本在Red…

4-4 D. 银行排队问题之单队列多窗口加VIP服务

题目描述 假设银行有K个窗口提供服务&#xff0c;窗口前设一条黄线&#xff0c;所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时&#xff0c;下一位顾客即去该窗口处理事务。当有多个窗口可选择时&#xff0c;假设顾客总是选择编号最小的窗口。 有些银行会给VIP客户以…

蓝桥杯省一题单

简述 这是我去年准备的一份题单&#xff0c;里面很多都是来自于acwing和leetcode的题目&#xff0c;我去年寒假的时候写了一遍&#xff0c;省赛考前前五天时又开始写了一遍&#xff0c;拿了java组省一。 强调一句&#xff1a;蓝桥杯真题没有必要刷&#xff0c;因为在你参加考试…

linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理等等

linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理 1 安装 scrcpy 地址 https://github.com/Genymobile/scrcpy 转到 relese 下载 我这里下载的是linux系统 v2.3.1 版本 scrcpy-2.3.1.tar.gz 下载 scrcpy-server v2.3.1 版本 scrcpy-server-v2.3.1 解压scrcpy-2.3…

【小呆的力学笔记】弹塑性力学的初步认知二:应力应变分析(2)

文章目录 1.4 主应力空间、八面体应力1.5 应变分析1.6 特殊应力、应变定义 1.4 主应力空间、八面体应力 一点的应力状态不论如何变化&#xff0c;其主应力和主方向一致的话&#xff0c;该点的应力状态就是唯一确定的。因此&#xff0c;我们用主应力方向建立一个三维坐标系来描…

【算法专题】二分查找(进阶)

&#x1f4d1;前言 本文主要是二分查找&#xff08;进阶&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…

【前端工程化】环境搭建 nodejs npm

文章目录 前端工程化是什么&#xff1f;前端工程化实现技术栈前端工程化环境搭建 &#xff1a;什么是Nodejs如何安装nodejsnpm 配置和使用npm 介绍npm 安装和配置npm 常用命令 总结 前端工程化是什么&#xff1f; 前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块…

77.Go中interface{}判nil的正确姿势

文章目录 一&#xff1a;interface{}简介二、interface{}判空三&#xff1a;注意点四&#xff1a;实际案例 一&#xff1a;interface{}简介 在go中的nil只能赋值给指针、channel、func、interface、map或slice类型的变量 interface 是否根据是否包含有 method&#xff0c;底层…

1333:【例2-2】Blah数集

【题目描述】 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah&#xff0c;对于以a为基的集合Ba定义如下&#xff1a; (1)a是集合Ba的基&#xff0c;且a是Ba的第一个元素&#xff1b; (2)如果x在集合Ba中&#xff0c;则2x1和3x1也都在集合Ba中&#xff1b; (3)没有其他元…

9. 嵌入式系统开发:安全性与可靠性设计模式---引言

在复杂的嵌入式系统设计中&#xff0c;为了提高嵌入式系统安全性并保护嵌入式系统免受各种潜在故障的影响&#xff0c;可以采用不同的设计模式。这些模式各自有优势和适用的场景&#xff1a; 1. 受保护的单通道模式&#xff08;Protected Single Channel Pattern&#xff09; …

【JavaSE篇】——数组练习

目录 &#x1f6a9;数组转字符串 &#x1f6a9;数组拷贝 &#x1f388;拷贝的实质 &#x1f388;copyOf方法(new) &#x1f36d;copyOf扩容 &#x1f388;arraycopy方法(局部的拷贝)(系统类) &#x1f388;copyOfRange方法(局部拷贝) &#x1f388;原数组.clone() &a…

竞赛练一练 第30期:GESP和电子学会相关题目练习

Day14&#xff1a;CIE一级2022.06_报时的公鸡 故事背景&#xff1a;公鸡在黎明时分会打鸣迎接太阳升起&#xff0c;古人也将鸡鸣声当做晨起的“闹钟”。 1. 准备工作 &#xff08;1&#xff09;背景&#xff1a;根据下图绘制两张背景&#xff1b; 01 02 &#xff08;2&…

python 获取未提前定义的属性报错 KeyError

python 获取未提前定义的属性报错 正文 最近用python编写了一个脚本&#xff0c;是对象形式的数据结构。发现python中对于没有定义的属性名&#xff0c;直接用中括号获取会报错。这一点有别于js。简单记录一下啊具体情况如下&#xff1a; obj {"a": 1,"b&qu…

代码随想录算法训练营Day42|0-1背包理论基础、416. 分割等和子集

目录 0-1背包理论基础 0-1背包问题 二维dp数组01背包 算法实现 一维dp数组01背包 ​编辑算法实现 416. 分割等和子集 前言 思路 算法实现 总结 0-1背包理论基础 0-1背包问题 题目链接https://kamacoder.com/problempage.php?pid1046 有n件物品…

【Javaweb程序设计】【C00162】基于SSM的儿童众筹救助系统(论文+PPT)

基于SSM的儿童众筹救助系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的儿童众筹救助系统 本系统分为登录模块、前台模块、管理员模块、用户模块以及发起人模块5个功能模块. 登录模块&#xff1a;这个功能模块用来让…

如何让haproxy不命中已经失效的服务器

最近在做负载均衡时&#xff0c;服务总是不稳定&#xff0c;经过日志分析&#xff0c;发现是haproxy负载代理时&#xff0c;命中了已经失效的服务节点。那么如何让haproxy不命中已经失效的服务器呢&#xff1f; 你可以配置服务器的健康检查&#xff08;Health Check&#xff09…

vs2019报错MSB4019 找不到导入的项目“BuildCustomizations\CUDA 9.2.props”

在VS中执行生成&#xff0c;报错如下&#xff1a;严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB4019 找不到导入的项目“D:\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 9.2.props”。请确认 Import 声明“D:\Microso…

C++进阶(七)AVL树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、AVL树的概念二、AVL树的旋转1、左单旋2、右单旋3、左右双旋4、右左双旋 三、AVL树的基本实…