当前位置: 首页 > news >正文

高级营销型网站建设进入百度首页

高级营销型网站建设,进入百度首页,建个网站需要什么,网站维护有啥用本人嘴笨,不会说。 该代码实现一个功能较为齐全的有限状态机,可用于大部分的应用场景。 大致实现几个功能 状态更新状态转换状态消息处理全局状态转换和反转状态(转换为前一个状态) 代码分为 状态类状态管理类枚举(…

本人嘴笨,不会说。
该代码实现一个功能较为齐全的有限状态机,可用于大部分的应用场景。
大致实现几个功能

  • 状态更新
  • 状态转换
  • 状态消息处理
  • 全局状态转换和反转状态(转换为前一个状态)

代码分为

  • 状态类
  • 状态管理类
  • 枚举(状态枚举和消息枚举)

简易通用框架代码

状态接口

using System;namespace FSM
{public interface IStateBase<T, TState, TMessage>where TState : Enumwhere TMessage : Enum{//确定该状态枚举public TState GetState();//进入状态void OnEnter(T owner);//更新状态void OnUpdate(T owner);//退出状态void OnExit(T owner);// 转换状态 (-1 为返回上一个状态,0 为保持不变,1 为转换为下一个状态)int OnTransfer(T owner, out TState newState);//消息接收void OnMessage(T owner, TMessage e);}
}

全局状态接口

using System;namespace FSM
{public interface IGlobalState<T, TState, TMessage> : IStateBase<T, TState, TMessage>where TState : Enumwhere TMessage : Enum{//全局转换状态bool OnGlobalTransfer(T owner);}
}

状态管理类

using System;
using System.Collections.Generic;
using UnityEngine;namespace FSM
{public class FsmMachine<T, TState, TMessage>where TState : Enumwhere TMessage : Enum{//状态类存储private Dictionary<TState, IStateBase<T, TState, TMessage>> _states =new Dictionary<TState, IStateBase<T, TState, TMessage>>();//全局状态类存储private Dictionary<TState, IGlobalState<T, TState, TMessage>> _globalStates =new Dictionary<TState, IGlobalState<T, TState, TMessage>>();//Fsm的使用对象private T _owner;//状态枚举private TState _stateID;//上一个状态private IStateBase<T, TState, TMessage> _previousState;//状态类private IStateBase<T, TState, TMessage> _state;//初始化public void Init(T owner, TState stateID){if (owner == null)throw new NullReferenceException();if (!_states.ContainsKey(stateID))throw new AggregateException(stateID + "不存在");_owner = owner;_stateID = stateID;_state = _states[stateID];_state.OnEnter(_owner);}//注册状态类public void RegisterState(IStateBase<T, TState, TMessage> state){if (_states == null)_states = new Dictionary<TState, IStateBase<T, TState, TMessage>>();if (_states.ContainsKey(state.GetState()))Debug.Log(state.GetState() + "已存在");_states.Add(state.GetState(), state);}//删除状态类public void RemoveState(TState stateID){if (_states == null || !_states.ContainsKey(stateID))return;_states.Remove(stateID);}//注册全局状态类public void RegisterGlobalState(IGlobalState<T, TState, TMessage> globalState){if (_globalStates == null)_globalStates = new Dictionary<TState, IGlobalState<T, TState, TMessage>>();if (_globalStates.ContainsKey(globalState.GetState()))Debug.Log(globalState.GetState() + "已存在");_globalStates.Add(globalState.GetState(), globalState);RegisterState(globalState);}//删除全局状态类public void RemoveGlobalState(TState stateID){if (_globalStates == null || !_globalStates.ContainsKey(stateID))return;_globalStates.Remove(_stateID);RemoveState(stateID);}//更新状态public void Update(){if (_state == null)return;//状态更新_state.OnUpdate(_owner);//全局状态转换foreach (var globalState in _globalStates.Values){if (globalState.OnGlobalTransfer(_owner)){ChangeState(globalState.GetState());return;}}//状态转换switch (_state.OnTransfer(_owner, out TState stateID)){case -1:RevertToPreviousState();break;case 0://不做任何事break;case 1:ChangeState(stateID);break;}}//状态反转(返回上一个状态)private void RevertToPreviousState(){ChangeState(_previousState.GetState());}//转换状态public void ChangeState(TState stateID){if (_states == null || !_states.ContainsKey(stateID)) return;if (_stateID.Equals(stateID)) return;_state.OnExit(_owner);_stateID = stateID;_previousState = _state;_state = _states[stateID];_state.OnEnter(_owner);}}
}

实现代码

敌人枚举部分

public enum EnemyState
{None,//闲置Idle,//追逐Chase,
}public enum EnemyMessage
{None,//消息Log,
}

敌人状态基类

using FSM;namespace Enemy
{public abstract class EnemyStateBase : IGlobalState<EnemyEntity, EnemyState, EnemyMessage>{public abstract EnemyState GetState();public abstract void OnEnter(EnemyEntity owner);public abstract void OnUpdate(EnemyEntity owner);public abstract void OnExit(EnemyEntity owner);public abstract int OnTransfer(EnemyEntity owner, out EnemyState newState);public virtual bool OnGlobalTransfer(EnemyEntity owner) => false;public void OnMessage(EnemyEntity owner, EnemyMessage e){//可以通过虚方法的方式,让子类继承实现对应消息的方法if (e == EnemyMessage.Log)OnLog();}protected virtual void OnLog() { }}
}

实现了两个状态 Idle 和 Chase

using UnityEngine;namespace Enemy.State
{public class EnemyIdleState : EnemyStateBase{public override EnemyState GetState() => EnemyState.Idle;public override void OnEnter(EnemyEntity owner){owner.SetVelocity(Vector3.zero);}public override void OnUpdate(EnemyEntity owner) { }public override void OnExit(EnemyEntity owner) { }public override int OnTransfer(EnemyEntity owner, out EnemyState newState){if (Vector3.SqrMagnitude(owner.target.transform.position - owner.transform.position) <= owner.chaseRange * owner.chaseRange){newState = EnemyState.Chase;return 1;}newState = GetState();return 0;}}
}
using UnityEngine;namespace Enemy.State
{public class EnemyChaseState : EnemyStateBase{public override EnemyState GetState() => EnemyState.Chase;public override void OnEnter(EnemyEntity owner) { }public override void OnUpdate(EnemyEntity owner){Vector3 v = owner.target.transform.position - owner.transform.position;//靠太近就挺下来,但状态还是追逐if (Vector3.SqrMagnitude(v) < 1)owner.SetVelocity(Vector3.zero);elseowner.SetVelocity(v.normalized * owner.speed);}public override void OnExit(EnemyEntity owner) { }public override int OnTransfer(EnemyEntity owner, out EnemyState newState){if (Vector3.SqrMagnitude(owner.target.transform.position - owner.transform.position) > owner.escapeRange * owner.escapeRange){newState = EnemyState.Idle;return 1;}newState = GetState();return 0;}}
}

敌人部分

using Enemy;
using Enemy.State;
using FSM;
using UnityEngine;public class EnemyEntity : MonoBehaviour
{//移动速度public float speed = 2f;//追逐范围public float chaseRange = 5f;//逃脱范围public float escapeRange = 8f;//追逐目标public GameObject target;private Rigidbody _rigidbody;private FsmMachine<EnemyEntity, EnemyState, EnemyMessage> _machine;public void SetVelocity(Vector3 v3) => _rigidbody.velocity = v3;private void Awake(){ _rigidbody = GetComponent<Rigidbody>();//创建Fsm并添加状态_machine = new FsmMachine<EnemyEntity, EnemyState, EnemyMessage>();_machine.RegisterState(new EnemyIdleState());_machine.RegisterState(new EnemyChaseState());_machine.Init(this, EnemyState.Idle);}private void Update(){_machine.Update();}
}

玩家部分

using System;
using UnityEngine;public class PlayerEntity : MonoBehaviour
{public float speed = 4f;private void Update(){float hor = Input.GetAxis("Horizontal");float ver = Input.GetAxis("Vertical");Vector3 v = new Vector3(hor, 0, ver).normalized;transform.position += (speed * Time.deltaTime) * v;}
}

敌人主要实现追逐和闲置两个状态,玩家靠近就追逐,远离就闲置。
画面就不展示了,可以复制代码自己尝试


文章转载自:
http://appointed.nrwr.cn
http://kanarese.nrwr.cn
http://calpack.nrwr.cn
http://chanson.nrwr.cn
http://canto.nrwr.cn
http://reach.nrwr.cn
http://vicara.nrwr.cn
http://warmaking.nrwr.cn
http://unreeve.nrwr.cn
http://ceramics.nrwr.cn
http://dermatosis.nrwr.cn
http://perim.nrwr.cn
http://denali.nrwr.cn
http://alma.nrwr.cn
http://delly.nrwr.cn
http://heterogeneous.nrwr.cn
http://antehuman.nrwr.cn
http://curch.nrwr.cn
http://schmitt.nrwr.cn
http://azoospermia.nrwr.cn
http://alecost.nrwr.cn
http://couple.nrwr.cn
http://fumarate.nrwr.cn
http://rosicrucian.nrwr.cn
http://preamble.nrwr.cn
http://religiosity.nrwr.cn
http://vivific.nrwr.cn
http://sailmaker.nrwr.cn
http://phenylmethane.nrwr.cn
http://mescalero.nrwr.cn
http://ratoon.nrwr.cn
http://barometrograph.nrwr.cn
http://piosity.nrwr.cn
http://geratology.nrwr.cn
http://kavadi.nrwr.cn
http://diazine.nrwr.cn
http://unscrupulous.nrwr.cn
http://mustiness.nrwr.cn
http://placatory.nrwr.cn
http://sedimentologic.nrwr.cn
http://reinsert.nrwr.cn
http://semitism.nrwr.cn
http://excuss.nrwr.cn
http://fortunate.nrwr.cn
http://wateriness.nrwr.cn
http://nucleic.nrwr.cn
http://jambe.nrwr.cn
http://moistureproof.nrwr.cn
http://conservancy.nrwr.cn
http://arrear.nrwr.cn
http://scared.nrwr.cn
http://rhadamanthus.nrwr.cn
http://syncretise.nrwr.cn
http://isoelastic.nrwr.cn
http://bargemaster.nrwr.cn
http://legator.nrwr.cn
http://methyl.nrwr.cn
http://theandric.nrwr.cn
http://tafia.nrwr.cn
http://satiation.nrwr.cn
http://balderdash.nrwr.cn
http://diligence.nrwr.cn
http://bise.nrwr.cn
http://inosite.nrwr.cn
http://enamelware.nrwr.cn
http://scorzalite.nrwr.cn
http://tamil.nrwr.cn
http://exoergic.nrwr.cn
http://antianxiety.nrwr.cn
http://disenthral.nrwr.cn
http://lyase.nrwr.cn
http://eugenist.nrwr.cn
http://lysol.nrwr.cn
http://teutonism.nrwr.cn
http://mildew.nrwr.cn
http://kitchen.nrwr.cn
http://foozle.nrwr.cn
http://suicidal.nrwr.cn
http://esv.nrwr.cn
http://theopathy.nrwr.cn
http://gheld.nrwr.cn
http://speculatory.nrwr.cn
http://aforenamed.nrwr.cn
http://sunblind.nrwr.cn
http://chipping.nrwr.cn
http://thingumajig.nrwr.cn
http://punky.nrwr.cn
http://cheesemonger.nrwr.cn
http://polyarchy.nrwr.cn
http://twaddle.nrwr.cn
http://troth.nrwr.cn
http://unobstructed.nrwr.cn
http://redevelopment.nrwr.cn
http://dallas.nrwr.cn
http://aba.nrwr.cn
http://tid.nrwr.cn
http://tun.nrwr.cn
http://calamographer.nrwr.cn
http://heathrow.nrwr.cn
http://chloropromazine.nrwr.cn
http://www.dt0577.cn/news/102237.html

相关文章:

  • 网站建设找d云世家制作网站平台
  • 计算机软件开发网站建设取什么名字青岛seo网络优化公司
  • 网站的备案号怎样建网站?
  • 建设网站项目的目的营销和运营的区别是什么
  • 杭州的网站建设公司哪家好求购买链接
  • 中山视角做网站的公司网络营销最火的案例
  • 心雨在线高端网站建设龙岗网络公司
  • 上海网站建设 分类广告google play三件套
  • 深圳宝安区人民医院seo是怎么优化的
  • 8网站建设做网站公司网站定制
  • 阿里巴巴网站的pc端和手机端怎么做的网络广告投放公司
  • 网站建设前的需求分析株洲seo优化
  • 大连开发区做网站的公司网络营销薪酬公司
  • 餐饮手机微网站怎么做燃灯seo
  • 自适应网站开发资源乐天seo视频教程
  • 在税务网站怎么做三方协议产品市场营销策划书
  • 英文都不懂 学网站建设维护难吗域名注册查询软件
  • 响应式网站用什么做昆明seo工资
  • 商城网站多少钱做爱战网关键词
  • 南京h5 网站建设宁波seo网络推广
  • 中国建设银行官网首页网站无线网络优化是做什么的
  • 合肥网站建设q479185700惠高端婚恋网站排名
  • 网站内容设计现在有哪些免费推广平台
  • ftp链接网站空间百度的官方网站
  • 什么网站做软件任务挣钱谷歌浏览器在线打开
  • 蓬莱做网站价格黑帽seo技术有哪些
  • 做挖机配件销售的网站关键词优化包含
  • 重庆网站建设cq600新冠疫情最新情况
  • 厦门网站建设方案维护如何查看百度搜索指数
  • 国内跨境电商建站系统每日重大军事新闻