首页 > 其他分享 >Unity 麦扣 x 勇士传说 全解析 之 有限状态机(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

Unity 麦扣 x 勇士传说 全解析 之 有限状态机(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

时间:2024-08-19 12:24:11浏览次数:14  
标签:void abstract 状态机 Unity currentMonster using 牢弟 public

        在编码前我一直有个疑问,为什么不是将方法写在一个一个类中,或者用的单例模式写个管理器来继承的方式来做怪物脚本,玩家控制和玩家动画控制的代码混在一起不说,与其他脚本之间的交互,让过于冗杂的代码不易阅读

        这节开始应用的有限状态机,似乎一定程度上解决了这个问题,但是之前的代码写都写了,所以只能将一部分放到状态机之中,将就写吧

1.有限状态机

思考,写一个基类状态机,应该有哪些状态机类,应该写成什么类型?

1.进入和退出肯定要有,也要有帧更新,还有因为该案例的移动方式是利用刚体的速度,所以还需要一个物理帧更新

而玩家和怪物要分别继承所以可以用抽象类,用接口也可以,缺点就是不能写一些基础的行为让子类继承

public abstract class BaseState 
{
    public abstract void OnEnter();
    public abstract void NormalUpdate();
    public abstract void PhysicsUpdate();
    public abstract void OnExit();        
}

野猪的巡逻状态 

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Xml;
using UnityEngine;

public class BoarPaxtrolState : BaseState {

    public override void OnEnter(Monster wcurrentMonster) {
        currentMonster = wcurrentMonster;
    }
    public override void NormalUpdate() {

        if ((currentMonster.headFor.x > 0 && currentMonster.physicscheck.isRightWall) 
            || (currentMonster.headFor.x < 0 && currentMonster. physicscheck.isLeftWall)
            ||!currentMonster.physicscheck.isGround) 
            {
            currentMonster.waitState = true;
            currentMonster.animator.SetBool("walk", false);
        }
    }

    public override void PhysicsUpdate() {

    }

    public override void OnExit() {
        currentMonster.animator.SetBool("walk",false);
    }


}

标签:void,abstract,状态机,Unity,currentMonster,using,牢弟,public
From: https://blog.csdn.net/2301_77947509/article/details/141321675

相关文章

  • Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(
    1.怪物的动画逻辑一览2.怪物的受伤死亡逻辑一览usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Xml;usingUnityEngine;publicclassMonster:MonoBehaviour{[Header("速度")]publicfloatnormalSpeed;publicfloatchas......
  • Unity 中 Color 与 Color32 的区别
    1.存储方式Color用四个浮点数(float)来表示RGBA,取值范围均是0到1举例:varorange=newColor(1f,0.5f,0f,1f);而Color32使用四个字节(byte)表示RGBA,取值范围是0到255举例:varorange=newColor32(255,128,0,255);2.区别由存储方式可以看出,Color32采用字节存储,占......
  • unity中的问题记录(角色的控制)
    unity中的默认访问修饰符与c#相同,class不写public,则默认同一程序集(internal)中可以访问,在unity中,程序集表现为项目,即同一项目可以互相访问类里的成员默认与c#同样相同,都是private在C#中,将字段和方法都设为私有(private)并使用static修饰符并不是“多此一举”,而是根据具体的设......
  • Unity 常用的生命周期函数
    publicclassMonoLife:MonoBehaviour{  privatevoidAwake()  {    print("Awake:只要物体显示状态为true则调用一次");  }  privatevoidOnEnable()  {    print("OnEnable:每一次物体启用时调用");  }  private......
  • Unity项目优化记录
    背景:测试反馈项目组游戏存在内存泄露,来找到中台这边协调排查。好家伙,跑了两次看了内存快照,再看资源组织和管理方式,存在的问题确实比较多。1、修复内存泄露:结算界面由于资源引用丢失导致整个面板不会被释放,每次泄漏50MB左右的内存。2、改进资源卸载,通过引用计数管理资源,当引用......
  • Unity 刚体 AddForce 的几种力类型
    今天在实现2D横版跳跃的时候,发现使用AddForce添加的力太突兀了,没有逐渐向上的过程,发现AddForce还有ForceModemode参数以下部分内容摘自BingCopilot总结Unity官网文档1.ForceMode.Force(默认值)描述:施加一个连续的力,考虑物体的质量效果:物体会逐渐加速,力的大小和方向......
  • 【unity2022与html交互】
    一、安装untiy1.官网下载https://unity.com/cn/download,这个类似于untiy管理器,很多版本都可以下2.安装后登陆账号,网页跳转登陆,然后登陆后进入软件页面选择要下载的版本,建议2022lst版本3.下载后,在网页上使用还需要添加模块WEBGL,还有一个中文汉化模块也可以下载 二、模型......
  • Unity 麦扣 x 勇士传说 全解析 之 怪物基类与野猪(附各模块知识的链接,零基础也包学会的
    通过一阵子的学习,我是这么认为的,因为该教程是难度两星的教程 ,也就是适合学了一阵子基础组件以后的学习者(什么都不会的学习者要是学这套课程会困难重重,如果你什么都不会那么需要学习一星教程)所以该课程没有那么多manger,代码也不那么面向对象,但是从怪物类之后就开始有相关的内......
  • 【Unity/网络】Unity和内网穿透的网络测试 —— 以聊天室为例
    这两天在做那个CodeMonky的胡闹厨房的案例,一直困扰我的是关于Lobby和Relay的相关网络服务,需要挂加速器并且延迟不低,所以我一直在寻找一些其他替代方案,想起来之前做一个UEC++的网络枪战时做过一个内网穿透的方法,所以在Unity中也采用这个方案,但中间怎么改IP和端口都没法连接成......
  • Unity FPSSample Demo研究
    1.前言 UnityFpsSampleDemo大约是2018发布,用于官方演示MLAPI(NetCode前身)+DOTS的一个FPS多人对战Demo。Demo下载地址(需要安装GitLFS):https://github.com/Unity-Technologies/FPSSample下载完成后3-40GB左右,若大小不对可能下载不完整。 时间原因写的并不完整,但大致描......