设计模式01———简单工厂模式 c#
首先我们打开一个项目

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

建基础通用包

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

任务:使用【简单工厂模式】生成四种不同怪物 【按不同路径移动】
首先资源商店下载四个怪物模型


接下来我们选取四个怪物作为预制体并分别起名为Monster1-4

都完全解压缩后放进预制体包在场景中删除

准备工作做完后 接下我们做【简单工厂模式】
简单工厂不属于23设计模式中的一项但是23设计模式中抽象工厂的基础
简单工厂最低需要三个类就可以完成加上Main类中调用也就四个
首先需要 【抽象产品类】
其次需要 【具体产品类】
再其次需要【生产工厂类】
最后我们通过Main继承Mono挂载再脚本上调用即可
实现:
1.创建脚本【抽象产品类】:


using UnityEngine;
public abstract class IMonster {
public GameObject Monster {get;set;}
public abstract void Load();
}
2.【具体产品类】:

using UnityEngine;
namespace Assets.Scripts.Product{
class MonsterA : IMonster{
public override void Load(){
Monster = Resources.Load<GameObject>("Prefabs/monster1");
if(Monster != null)
Monster = GameObject.Instantiate(Monster,new Vector3(0,0,0),Quaternion.identity);
}
}
}
3.【生产工厂类】

using Assets.Scripts.Product;
namespace Assets.Scripts.SimpleFactory{
public static class Factory{
public static IMonster GetMonster(string type) {
IMonster monster;
switch (type) {
case "monsterA":
monster = new MonsterA();
break;
default:
monster = null;
break;
}
return monster;
}
}
}
4.【控制挂载类】

using Assets.Scripts.SimpleFactory;
using UnityEngine;
namespace Assets.Scripts{
public class Main : MonoBehaviour{
public IMonster monster;
public string type;
private void Start(){
monster = Factory.GetMonster("monsterA");
monster.Load();
}
}
}
我们回到unity场景中创建一个空物体改名Obj 重置位置 将Main脚本挂载

运行即可生成

接下来我们创建 多个【具体产品类】

当然也需要在其他类里添加 这就是简单工厂不好的地方 增一类 动三类


运行即可实现:

目前【简单工厂模式】已经完成
接下来我们将生成的怪物 按不同路径移动
原理:
【通过使小球(WayPoint)作为引导使怪物进行自动导航】
我们首先在unity场景中创建一个3D小球 改名为 WayPoint

将WayPoint放进预制体包 并在场景中移除

接下来通过预制体 拖拽至场景中放置不同路径

我们放大Plane

接下来创建一个空父物体代表移动路径 改名PathA
将所有WayPoint放进PathA下做子类

接下来创建移动脚本Move

将以下代码放进Move

using UnityEngine;
public class Move : MonoBehaviour{
public Transform[] arr;
public float speed = 1f;
public int idx = 0;
void Start(){
Transform path = GameObject.Find("PathA").transform;
if (path != null){
arr = new Transform[path.childCount];
for (int i = 0; i < arr.Length; i++)
arr[i] = path.GetChild(i);
}
else
Debug.LogError("查找路径点父物体失败 检查父物体名字");
}
private void Update(){
Vector3 direction = arr[idx].position - transform.position;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 0.1f);
transform.Translate(Vector3.forward * speed);
if (direction.sqrMagnitude < 1f){
idx++;
if (idx > arr.Length - 1)
idx = 0;
}
}
}
将Move挂载到四个怪物预制体上
运行前
运行后

相关文章:
设计模式01———简单工厂模式 c#
首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 任务:使用【简单工厂模式】生成四种不同怪物 【按不同路径移动】 首先资源商店下载四个怪物模型 接下来我们选取四个怪物作为预制体并分别起名…...
如何解决MidJourney错过付费后被暂停
问题 假定你已经成功订阅购买了 MidJourney 一段时间,下个月扣费周期到了。 如果你卡里余额不足,卡被封或失效了,或者你想着最近没啥用得上 MidJourney 的地方先省着不续费,等要用的时候就用不了。 如果想要去官网的续费页&…...
考研人考研魂——英语单词篇(20231010)
下一站,上岸 transplanttransportstorestoragestockstridestrikestringstructurestrikingstunprimaryprimeprimitiveprincipalpsychiatryprinciplepsychologyliableliberal transplant n. (器官等的)移植;移植的器官 vt. 移植&a…...
java 版 项目管理工程系统,实现项目全周期管理-源码交付
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…...
TOGAF(企业架构)
TOGAF 核心概念(官方原版) 什么是TOGAF? TOGAF?是一种经验证的企业架构方法和框架,被世界领先的组织用于提高业务效率。它是一个企业架构标准,确保企业架构专业人员之间的标准、方法和通信一致,以便我们…...
vue中v-model的原理是什么?v-model作用在组件上的原理是什么?sync修饰符的原理是什么?
vue中v-model的原理是什么? 特点:双向绑定 数据>视图 视图>数据 场景: 收集表单数据组件上 原理: v-model只是个语法题,本质是:v-model v-bind (:value) v-on (input) <template><…...
新闻api接口,新闻资讯,社交媒体,体育赛事,全国热门带正文新闻查询API接口
一、接口介绍 解决同一类新闻在不同平台上的内容获取问题,在归档主流新闻平台的内容数据基础上,对外提供统一的调用方式来完成实时、最新的相关新闻的获取,极大方便各类企业在自有软件中集成新闻内容的功能。支持200余个新闻大站,…...
Redis - php通过ssh方式连接到redis服务器
1.应用场景 主要用于使用php通过ssh方式连接到redis服务器,进行一些操作. 2.学习/操作 1.文档阅读 chatgpt & 其他资料 SSH - 学习与实践探究_ssh应用场景 2.整理输出 2.1 是什么 TBD 2.2 为什么需要「应用场景」 TBD 2.3 什么时候出现「历史发展」 TBD 2.4 …...
IDEA的使用(四)创建不同类型的工程(IntelliJ IDEA 2022.1.3版本)
1. 创建Java工程 创建之后,src下是空的。可以在src下创建软件包Package,命名采用域名倒序。在软件包下再创建Java类。Java类运行后出现中文乱码,就到控制台和文件编码这两个地方设置编码。 2. 创建JavaWeb工程 2.1 在win11和IDEA中配置Tomca…...
Mac上brew切换国内源【极简方案】
前言 下载一些开源包如telnet时,通过brew下载经常由于网络不通,导致下载失败。所以mac用户最好一次性设置brew为国内源。 方案 极简四步,换Homebrew的镜像源为阿里云镜像,依次在终端执行以下几步: 1、cd “$(brew …...
计算机网络面试常问问题--保研及考研复试
前言: Hello大家好,我是Dream。今年保研上岸山东大学人工智能专业 (经验贴),现在将我自己的专业课备考知识点整理出来,分享给大家,希望可以帮助到大家!这是重点知识总结,…...
elasticsearch 8.5.3问题记录
一:解决 elasticsearch 高版本 warning: ignoring JAVA_HOMEC:\Program Files\Java\jdk-11; using bundled JDK if defined JAVA_HOME (set JAVA_HOME%JAVA_HOME%; )示例版本Elasticsearch 8.5.3 可以与 JDK 11 兼容,但不支持 JDK 17。确保选…...
【Ubuntu虚拟机】
Ubuntu虚拟机配置samba 转载知乎 samba: 安装samba服务 sudo apt-get install samba 2.确定是否确实安装了 samba --version 输入这个命令,确实安装的话,会打印出samba的版本 3.创建一个samba服务的共享目录,并配置该目录为最高权限 sudo …...
江苏服务器有哪些特点
江苏服务器具有以下特点: 高性能:江苏服务器采用高性能的处理器和大内存,能够快速、流畅地处理网络请求和数据,确保网络的高效运行。高防性:江苏服务器通常具有高防性,能够抵御各种DDoS攻击和CC攻击&#…...
acwing算法基础之基础算法--求逆序对的数目
目录 1 知识点2 模板 1 知识点 合并两个有序数组,对于有序数组[l,mid]和有序数组[mid1,r],将i指向前者,将j指向后者。在将每一个j插入最终有序数组中时,计算 s j m i d − i 1 s_jmid-i1 sjmid−i1,此为(x,nums[j…...
uni-app 实现考勤打卡功能
一、在页面中引入地图组件 <map id"map" style"width: 100%; height: 100%" :latitude"myLatitude" :longitude"myLongitude" :circles"circles" :markers"markers"> </map>属性名类型说明longitudeN…...
Jenkins发布失败记录
Exception when publishing, exception message [Exec exit status not zero. Status [127]] 见链接:Jenkins发布时常见异常(持续更新...)_exception when publishing, exception message [exec_码农StayUp的博客-CSDN博客 The remote end hu…...
【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...
python flask接口字段存在性校验函数(http接口字段校验)(返回提示缺少的字段信息)validate_fields()
文章目录 字段存在性校验示例 字段存在性校验 from flask import Flask, request, jsonifyapp Flask(__name__)def validate_fields(data, fields):missing_fields [field for field in fields if field not in data]if missing_fields:return False, f"缺少以下字段: …...
Linux文件-内存映射mmap
mmap定义为:Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。 在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创…...
挑战复杂功能,让快马AI成为你微信小程序开发的智能编程搭档
最近在开发一个微信小程序时,遇到了一个比较复杂的自定义组件需求:一个可以左右滑动切换日期、并显示对应日程的周视图日历。这个功能看似简单,但实际开发中涉及到日期计算、滑动事件处理、数据绑定等多个难点。好在发现了InsCode(快马)平台&…...
OpenCascade实战:TopoDS_Shape数据结构的高效遍历与优化策略
1. TopoDS_Shape数据结构基础解析 在OpenCascade中,TopoDS_Shape是构建三维模型的基石。这个看似简单的类实际上包含了三个关键数据成员:myTShape、myLocation和myOrient。理解这三个字段的运作机制,是高效操作模型的前提。 myTShape是一个智…...
昇腾910B分布式微调避坑指南:从SSH免密到权重合并的5个常见问题
昇腾910B分布式微调实战避坑手册:5个关键环节的深度解析 当你在深夜的机房盯着屏幕上闪烁的错误日志,第八次尝试启动分布式微调任务却依然卡在SSH认证环节时,那种混合着焦虑与挫败的感受,我太熟悉了。这不是又一篇按部就班的操作手…...
告别重复造轮子:用快马AI为qclaw项目封装高效算法模板与优化工具
在量子计算领域,qclaw项目的开发往往需要处理大量重复性工作。每次从零开始编写量子算法不仅耗时耗力,还容易引入人为错误。最近我在开发一个量子化学模拟项目时,发现了一个能显著提升效率的方法——利用InsCode(快马)平台构建可复用的算法模…...
从2D到3D草图进阶:Solidworks曲面建模效率提升全攻略(2023新版)
从2D到3D草图进阶:Solidworks曲面建模效率提升全攻略(2023新版) 在工业设计领域,Solidworks始终保持着强大的竞争力,尤其当设计师从平面思维跃升至三维空间时,3D草图功能便成为突破创意边界的利器。不同于传…...
TOAST UI Chart缩放功能完全指南:如何快速实现数据深入探索
TOAST UI Chart缩放功能完全指南:如何快速实现数据深入探索 【免费下载链接】tui.chart 🍞📊 Beautiful chart for data visualization. 项目地址: https://gitcode.com/gh_mirrors/tu/tui.chart TOAST UI Chart是一款功能强大的数据可…...
百度网盘提取码智能获取工具:提升资源获取效率的技术方案
百度网盘提取码智能获取工具:提升资源获取效率的技术方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源爆炸的今天,百度网盘作为主流文件分享平台,已成为学习资料、工作文件和媒…...
手机也能跑Llama?聊聊移动端/边缘设备部署LLM的现状、挑战与未来展望
手机也能跑Llama?移动端大语言模型部署实战指南 当ChatGPT掀起生成式AI浪潮时,大多数人都认为这类技术只能依赖云端算力。但2023年Meta开源Llama系列模型后,一个令人兴奋的问题开始被频繁讨论:我们能否在手机这样的移动设备上本地…...
EcomGPT-7B模型文件结构与代码解读:从Hugging Face到生产部署
EcomGPT-7B模型文件结构与代码解读:从Hugging Face到生产部署 如果你已经玩过一些开箱即用的AI模型,可能会好奇,一个像EcomGPT-7B这样的模型,它到底是由哪些文件组成的?那些配置文件里密密麻麻的参数都是什么意思&…...
Janus-Pro-7B自主部署:从nvidia-smi监控到supervisor服务管理
Janus-Pro-7B自主部署:从nvidia-smi监控到supervisor服务管理 1. 项目概述 Janus-Pro-7B是DeepSeek发布的一款统一多模态理解与生成模型,它突破了传统模型在处理不同任务时的冲突问题。这个模型支持图像问答、OCR识别、图表分析等多模态理解功能&#…...
