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

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();
            }
        }
       //按下A
        if (Input.GetKeyDown(KeyCode.A))
        {
            var x = TransportFactory.GetTransport("水", "火");
            if (x != null)
            {
                x.react();
            }
        }
       //按下S
        if (Input.GetKeyDown(KeyCode.S))
        {
            var x = TransportFactory.GetTransport("火", "水");
            if (x != null)
            {
                x.react();
            }
        }
    }
}

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

6.运行游戏 

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组和指针常见笔试题(深度剖析)

下边我来讲一下常见的面试题&#xff0c;过程很详细放心观看 #include<stdio.h>#include <string.h>int main() {char arr[] { a,b,c,d,e,f };printf("%d\n", strlen(arr));//随机值&#xff0c;因为strlen是遇到斜杠\0结束&#xff0c;统计\0之前的字符…

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…

实战开发coze应用-姓氏头像生成器(上)

​欢迎关注【AI技术开发者】 上次&#xff0c;我们开发了一个对话形式的头像生成器智能体&#xff08;Agents&#xff09;&#xff0c;广受大家欢迎。 同时也接收到一些用户的反馈&#xff0c;生成前无法看到头像样式、初次使用不会用等等。 对此&#xff0c;我准备使用Coze开…

达梦:用户和模式

目录标题 数据库管理系统与用户权限管理**四权分立****用户管理与权限划分****用户管理界面与权限控制****用户创建与管理****实操**1. **默认创建用户与模式**&#xff1a;2. **用户权限和角色分配**&#xff1a;3. **命令行管理用户与角色**&#xff1a;4. 模式也可以创建 **…

【C++】类与对象全面剖析(尾卷)(构造深化、类型转换、static成员特性及内部类与匿名对象)

文章目录 一、再探构造函数二、隐式类型转换三、类中的静态成员1.静态成员变量2.静态成员函数 四、友元函数与友元类五、内部类六、匿名对象 一、再探构造函数 在之前的文章中我们大致将构造函数讲完了&#xff0c;但是还有一个比较重要的知识点当时没有讲到&#xff0c;因为如…

【部署优化篇四】《DeepSeek移动端优化:CoreML/TFLite实战对比》

手机里的AI助手能秒速回答你的问题,游戏人物能实时追踪你的表情变化,这些酷炫功能的背后都离不开移动端机器学习框架的支撑。今天我们就来撕开两个当红炸子鸡框架CoreML和TFLite的神秘面纱,看看它们在模型优化这件事上到底藏着哪些独门绝技。 一、移动端优化的生存法则 在…

SAM C++ TensorRT(实时图像分割)

SPEED SAM C TENSORRT &#x1f310; 1、概述 用于SAM&#xff08;segment anything model分割一切模型&#xff09;的TensorRT和CUDA优化的高表现C实现&#xff0c;特别适用于实时图像分割任务。 &#x1f4e2; 更新 模型转换&#xff1a;从ONNX模型构建TensorRT引擎以加速…

鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说&#xff0c;ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风&#xff0c;我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

用 Biome 替代 ESLint 和 Prettier

简介 ESLint 和 Prettier ESLint&#xff1a;代码质量检查工具&#xff0c;确保代码风格一致与无错误 Prettier&#xff1a;代码格式化工具&#xff0c;自动美化代码布局 所以&#xff1a;ESLint Prettier 能自动美化代码、自动检查代码错误的工具 Biome Biome&#xff1a;…

cluster-smi 命令详解

cluster-smi 是一个用于管理和监控集群中 GPU 的命令行工具&#xff0c;通常用于显示集群中每个节点&#xff08;如 GPU 服务器&#xff09;上的 GPU 使用情况。该命令是类似于 nvidia-smi 的工具&#xff0c;但它支持在集群环境中对多个节点进行管理和监控。 使用 cluster-sm…

Cursor使用及搭建网络环境

一、Cursor使用 1、注册、登录、下载 【CursorClaude】 2、登录后 3、破解方式 第一种方式&#xff1a; 14天到期后用其他邮箱重新注册&#xff0c;网易邮箱可以无限注册&#xff0c;把cursor中之前登录的账号退出&#xff0c;再登录新的账号。 第二种方式&#xff1a; 因为…

聚焦地灾防治,助力城市地质安全风险防控

城市是人类社会发展的重要载体&#xff0c;承载着经济繁荣、文化交流和人口聚集等重要功能。然而&#xff0c;由于城市建设过程中地质条件复杂&#xff0c;地质灾害风险隐患存在&#xff0c;城市地质安全等问题日益突出&#xff0c;引起人们的广泛关注。为保障城市发展的安全和…

VsCode美化 Json

1.扩展中输入:pretty json 2. &#xff08;CtrlA&#xff09;选择Json文本 示例:{ "name" : "runoob" , "alexa" :10000, "site" : null , "sites" :[ "Google" , "Runoob" , "T…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师&#xff0c;会一点浅薄的前端三大件&#xf…

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…

Git是什么

简单介绍&#xff1a; Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改&#xff0c;特别是在多人协作开发的环境中。 Key: 分布式 版本控制 系统 最常用于软件开发&#xff0c;但也可以用于管理任何类型的文件和文件夹。 Git帮助团队跟踪和管理文件的历史版本&a…

蓝星旋钮烧录底座组装说明

烧录底座pcb为群内清秋设计&#xff0c;感谢大佬开源 效果展示 指示灯明亮 可安装60mm硅胶防滑垫 话不多说&#xff0c;演示组装过程

Comsol 双层带穿孔多孔材料背衬的穿孔板的吸声:亥姆霍兹共振腔的能量耗散

提出了一种新型的低频吸声赫尔姆霍兹共振器&#xff0c;它由两个带孔的刚性面板和一个逐渐带孔的多孔材料背衬组成。通过使用双重孔隙理论将结构划分为多层系统&#xff0c;开发了一个理论模型&#xff0c;该模型通过有限元模拟和实验测量得到验证。研究了所提出的声学超材料的…

前OpenAI CTO Mira Murati创办AI新公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…