在Unity中用简单工厂模式模拟原神中的元素反应

ops/2025/2/22 15:54:12/

1. 第一步创建3个脚本Factory(反应工厂),Reactions(具体反应),FactoryText(测试反应的脚本)

 2.编写工厂脚本

using UnityEngine;// 定义一个元素反应的接口,所有具体的元素反应类都需要实现这个接口
// 接口写在Factory命名空间外部,方便其他类实现
public interface Ireaction
{void react();
};
public class Factory : MonoBehaviour
{
//  单例模式public static Factory instance;void Awake(){if (instance == null){instance = this;DontDestroyOnLoad(gameObject);}else{Destroy(gameObject);}}
}// 定义一个 TransportFactory 类,用于根据传入的元素类型获取对应的元素反应类
public class TransportFactory
{public static Ireaction GetTransport(string type1, string type2){switch (type1.ToLower(), type2.ToLower()) // 将传入的元素类型转换为小写,以便进行不区分大小写的比较{case ("水", "草"):case ("草", "水"):return new combustion();case ("水", "火"):case ("火", "水"):return new evaporation();case ("水", "冰"):case ("冰", "水"):return new Freeze();case ("火", "冰"):case ("冰", "火"):return new Melting();default:Debug.Log("无法反应");return null;}}
}

3.编写具体的反应类 

 不同的反应继承Ireaction接口并实现反应方法。

using UnityEngine;public class combustion : Ireaction
{public void react(){Debug.Log("燃烧");}
}
public class evaporation : Ireaction
{public void react(){Debug.Log("蒸发");}
}
public class Freeze : Ireaction
{public void react(){Debug.Log("冻结");}
}
public class Melting : Ireaction
{public void react(){Debug.Log("融化");}
}

4.编写测试脚本

using UnityEngine;public class FactoryText : MonoBehaviour
{void Update(){//按下空格if (Input.GetKeyDown(KeyCode.Space)){//通过工厂模式得到具体要执行的反应var x = TransportFactory.GetTransport("水", "草");//如果反应不为空就执行反应if (x != null){x.react();}}//按下Aif (Input.GetKeyDown(KeyCode.A)){var x = TransportFactory.GetTransport("水", "火");if (x != null){x.react();}}//按下Sif (Input.GetKeyDown(KeyCode.S)){var x = TransportFactory.GetTransport("火", "水");if (x != null){x.react();}}}
}

5.创建一个空对象并将测试脚本挂到空对象上

6.运行游戏 

然后依次按下空格,A,S。就看到具体的反应被打印出来了。

本篇文章提供了元素反应的具体思路,当然具体效果还需要在游戏中进行处理 。希望这篇文章对你有帮助。


http://www.ppmy.cn/ops/160084.html

相关文章

Linux 文件与目录管理

Linux 文件与目录管理 我们知道 Linux 的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径: 路径的写法…

idea-gradle打包运行配置

最近接触了一个项目,使用gradle做为构建工具,这里记录一波,毕竟平时使用的都是maven idea 配置 这里有个坑,Gradle Wrapper,配置的地址gradle下载超时 这个配置修改成阿里的 第一张 第二张 第二张配置的jvm貌似没啥用…

数据结构(陈越,何钦铭)第三讲 树(上)

3.1 树与数的表示 3.1.1 顺序查找 int SequentialSearch(List Tbl,ElementType K){int i;Tbl->Element[0]K;for(iTbl->Length;Tbl->Element[i]!K;i--);return i; } typedef struct LNode *List; struct LNode{ElementType Element[MAXSIZE];int Length; };3.1.2 二分…

Brave132编译指南 MacOS篇 - 编译环境配置(四)

1. 引言 在成功获取Brave浏览器的源代码之后,我们来到了编译流程的下一个关键环节:配置编译环境。一个正确且精心配置的编译环境不仅能确保编译过程的顺利进行,还能显著提升编译效率。本篇将详细指导大家如何配置Brave浏览器在MacOS系统上的…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

深研究:与Dify建立研究自动化应用

许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…

android模拟加班

我的设想是让其他人体验加班的感觉。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&…

pnpm和npm安装TailwindCss

npm下载及初始化来自Tailwind官方文档 npm下载&#xff1a; npm install -D tailwindcss npm初始化Tailwind&#xff1a; npx tailwindcss init pnpm下载&#xff1a; pnpm add -D tailwindcss3.4.1 postcss autoprefixer pnpm初始化Tailwind&#xff1a; pnpm exec tailwindc…