DeepSeek教unity------State Machine

在Unity游戏开发中,状态机(State Machine)是一种常用的设计模式,用于管理游戏对象的不同状态及其转换。状态机可以帮助你更好地组织代码,使其更易于维护和扩展。以下是一个简单的状态机实现示例,适用于Unity中的游戏对象。

1. 定义状态接口

首先,我们定义一个状态接口 IState,所有具体状态类都需要实现这个接口。

/****************************************************
    文件:IState.cs
	作者:Edision
    日期:#CreateTime#
	功能:状态接口
*****************************************************/

public interface IState
{
    void Enter();
    void Update();
    void Exit();
}

2. 实现具体状态类

接下来,我们实现一些具体的状态类。每个状态类都需要实现 IState 接口。

/****************************************************
    文件:StateMachine.cs
	作者:Edision
    日期:#CreateTime#
	功能:默认(空闲)状态
*****************************************************/

using UnityEngine;

public class IdleState : IState
{
    public void Enter()
    {
        Debug.Log("Entering Idle State");
    }

    public void Update()
    {
        Debug.Log("Updating Idle State");
    }

    public void Exit()
    {
        Debug.Log("Exiting Idle State");
    }
}

/****************************************************
    文件:StateMachine.cs
	作者:Edision
    日期:#CreateTime#
	功能:追逐状态
*****************************************************/
public class ChaseState : IState
{
    public void Enter()
    {
        Debug.Log("Entering Chase State");
    }

    public void Update()
    {
        Debug.Log("Updating Chase State");
    }

    public void Exit()
    {
        Debug.Log("Exiting Chase State");
    }
}

/****************************************************
    文件:StateMachine.cs
	作者:Edision
    日期:#CreateTime#
	功能:攻击状态
*****************************************************/
public class AttackState : IState
{
    public void Enter()
    {
        Debug.Log("Entering Attack State");
    }

    public void Update()
    {
        Debug.Log("Updating Attack State");
    }

    public void Exit()
    {
        Debug.Log("Exiting Attack State");
    }
}

3. 实现状态机类

状态机类 StateMachine 负责管理状态的转换和更新。

/****************************************************
    文件:StateMachine.cs
	作者:Edision
    日期:#CreateTime#
	功能:状态机类
*****************************************************/

public class StateMachine
{
    private IState currentState;

    public void ChangeState(IState newState)
    {
        if (currentState != null)
        {
            currentState.Exit();
        }

        currentState = newState;
        currentState.Enter();
    }

    public void Update()
    {
        if (currentState != null)
        {
            currentState.Update();
        }
    }
}

4. 在游戏对象中使用状态机

最后,我们在一个游戏对象(例如敌人AI)中使用状态机来管理其行为。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    private StateMachine stateMachine;

    private IdleState _idleState;
    private ChaseState _chaseState;
    private AttackState _attackState;

    private void Awake()
    {
        _idleState = new IdleState();
        _chaseState = new ChaseState();
        _attackState = new AttackState();

    }

    void Start()
    {
        stateMachine = new StateMachine();
        stateMachine.ChangeState(_idleState);
    }

    void Update()
    {
        stateMachine.Update();

        // 示例:根据条件切换状态
        if (Input.GetKeyDown(KeyCode.Space))
        {
            stateMachine.ChangeState(_chaseState);
        }

        if (Input.GetKeyDown(KeyCode.A))
        {
            stateMachine.ChangeState(_attackState);
        }
    }
}

5. 运行游戏

将 EnemyAI 脚本附加到一个游戏对象上,运行游戏。你可以通过按下空格键和 A 键来切换状态,并在控制台中看到状态转换的日志输出。

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

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

相关文章

组学数据分析实操系列 |(四) 富集气泡图的绘制

前言:在上一篇中,我们介绍了利用Metascape零代码实现富集分析,但是Metascape的富集分析结果是以柱状图的形式展示的。文章中更常使用的富集结果可视化方式是气泡图。气泡图可以通过气泡的坐标、形状、颜色、大小等来展示更加丰富的富集分析结果&#xff…

浏览器开发者工具(F12)查看请求的响应体内容显示”无法加载响应数据: No resource with given identifier found“

背景 复习在 SSM(Spring Spring MVC MyBatis)框架中,点击登录请求后返回 JSON 格式的数据,出现只有登录失败的请求才有响应值,比如: {success: false, message: “没有此用户”, code: 400} 而成功的请求…

Deepseek 万能提问公式:高效获取精准答案

### **Deepseek 万能提问公式:高效获取精准答案** 在使用 Deepseek 或其他 AI 工具时,提问的质量直接决定了答案的精准度和实用性。以下是一个万能的提问公式回答: --- ### **1. 明确背景(Context)** - **作用**…

从月牙定理看古希腊数学的奇妙突破

文章目录 每日一句正能量前言古希腊人的 “化圆为方” 之梦(一)几何作图的基本规则(二)化圆为方问题的起源与发展(三)化圆为方的意义 月牙面积定理的诞生(一)希波克拉底的生平与成就…

Linux操作系统--信号

目录 1.信号产生 概念: core vs Term 信号产生的5种条件 从软硬件理解信号的保存 软件,如何理解信号处理? 硬件中断 2、信号捕捉 3、信号阻塞 信号其他相关常见概念 1.信号产生 概念: 什么是信号?信号一种用…

太空飞船任务,生成一个地球发射、火星着陆以及下一次发射窗口返回地球的动画3D代码

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from mpl_toolkits.mplot3d import Axes3D# 天体参数设置(简化模型) AU 1.5e8 # 天文单位(公里) earth_orbital_radius …

sql注入之python脚本进行时间盲注和布尔盲注

一、什么是时间盲注和布尔盲注? 答:时间盲注是攻击者通过构造恶意sql语句利用sleep()等延迟函数来观察数据库响应时间差异来进行推断信息和条件判断。如果条件为真,数据库会执行延时操作,如果为假则立即返回。响应时间较短。 SELE…

Python .py文件打包成.exe可执行程序,带托盘图标的可执行文件

Python .py文件打包成.exe可执行程序,带托盘图标的可执行文件 安装pyinstalle 查看是否安装了pyinstaller 已安装 C:\Users\Administrator>pip show pyinstaller Name: pyinstaller Version: 6.12.0 Summary: PyInstaller bundles a Python application and a…

可信数据空间 X 大模型,实践场景案例分享

近期,国家数据局发布《可信数据空间发展行动计划(2024—2028年)》,这是国家层面首次针对可信数据空间这一新型数据基础设施进行前瞻性的系统布局。可信数据空间,是一类全新的数据流通利用基础设施,同时也是…

Java-数据结构-(HashMap HashSet)

一、Tree和Hash的区别 在上一篇文章中,我们讲到了"TreeMap"和"TreeSet",但当我们刷题的时候却会发现,实际应用Map和Set时,却常常都只会用"HashMap"和"HashSet",这是为什么呢…

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…

ShenNiusModularity项目源码学习(9:项目结构)

ShenNiusModularity源码主要有11个project(其实还有officialweb、test两个文件夹,大致有4、5个project,但看着跟主要项目代码没太大关系,暂时不管),这11个project的依赖关系如下图所示,其中最下…

用deepseek学大模型08-cnn残差网络

残差网络 参考:https://blog.csdn.net/2301_80750681/article/details/142882802 以下是使用PyTorch实现的三层残差网络示例,包含三个残差块和完整的网络结构: import torch import torch.nn as nnclass BasicBlock(nn.Module):expansion…

【C++】36.C++IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4. stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。pri…

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…

JCRQ1河马算法+消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测

JCRQ1河马算法消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-LSTM-Attention、CNN-LSTM-Attent…

[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除

一、选项字节与读写保护 1.1 为什么要设置读写保护 防止内部FLASH中的程序被非法读取。 在实际发布的产品中,STM32芯片的内部FLASH存储了控制程序。然而,如果不对内部FLASH采取任何保护措施,用户可以使用下载器直接读取其内容,并…

【算法与数据结构】字典树(Trie)详解

目录 一,字典树的定义 二,字典树的代码实现 完整代码详细注释: 测试用例测试结果: 三,处理其他字符 四,内存优化与扩展 1. 内存优化 2. 扩展功能 五,扩展功能支持通配符匹配 六&…

MySQL 之存储引擎(MySQL Storage Engine)

MySQL 之存储引擎 常见存储引擎及其特点 ‌InnoDB‌: ‌特点‌:支持事务处理、行级锁定、外键约束,使用聚簇索引,适合高并发读写和事务处理的场景‌。‌适用场景‌:需要高可靠性、高并发读写和事务处理的场景‌。 ‌M…

CXL ALMP(ARB/MUX Link Management Packet)理解

前言: ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。以下是其核心特性…