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

做网站基本要求一般通过486

做网站基本要求,一般通过486,在godaddy做网站贵吗,经营类网站备案文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2… 文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2022.3.32f1c1实现基本的 AI 框架。其中用 Cube绿色代替怪物模型Cube红色代替玩家即 AI 目标。 ​ 项目地址https://github.com/zheliku/StateMachine_AI。 2 模块介绍 2.1 BaseState ​ 在框架介绍的基础上添加了两个方法 DistanceOfXZ(Vector3, Vector3) 用于计算 xz 平面上的距离不考虑 y 轴方向。 DrawGizmos() 用于辅助绘制范围在 Scene 窗口中显示。 using UnityEngine;/// summary /// 状态基类 /// /summary public abstract class BaseState {public virtual EAIState AIState { get; } // 状态类型protected StateMachine _stateMachine; // 附属的状态机public BaseState(StateMachine stateMachine) {_stateMachine stateMachine;}public abstract void OnStateEnter();public abstract void OnStateUpdate();public abstract void OnStateExit();/// summary/// 辅助绘制范围不强制重写/// /summarypublic virtual void DrawGizmos() { }/// summary/// XZ 平面上的距离/// /summaryprotected float DistanceOfXZ(Vector3 pos1, Vector3 pos2) {pos1.y pos2.y 0;return Vector3.Distance(pos1, pos2);} }2.2 …State ​ 项目实现了 4 种 AI 状态包括 PatrolState巡逻状态ChaseState追逐状态AttackState攻击状态BackState返回状态 2.2.1 PatrolState ​ PatrolState 实现较为详细其将巡逻方式分为 3 种 public enum EPatrolType {Stay, // 原地播放某个动作睡觉、放哨等CircleMove, // 圆形范围内随机移动PathMove // 按照路径移动 }​ 巡逻数据可以直接在 PatrolState 类中声明。本项目选择封装在 PatrolStateData 中。所有 Data 均继承 ScripteObject 类可以在 Project 窗口中右键直接创建并配置对应数据。 PatrolStateData所有巡逻种类的共有数据。 PatrolStateStayData原地巡逻的数据。 PatrolStateMoveData移动巡逻的数据。 PatrolStateCircleMoveData圆形范围移动巡逻的数据。 PatrolStatePathMoveData路径移动巡逻的数据。 Stay 原地播放某个动作因此需要 AI 动作枚举。目前只添加 Sleep 动作。 public enum EAction {Sleep, }Move 范围内随机移动分为两种Circle、Path。区别是获取下一次目标位置的方式不同因此提取出如下逻辑 public class PatrolState : BaseState {private PatrolStateData _data; // 巡逻数据.../// summary/// 移动/// /summaryprivate void OnMoveUpdate(IAIObject aiObject, EPatrolType moveType) {var data (PatrolStateMoveData)_data; // 转化数据..._data.targetPos moveType switch {EPatrolType.CircleMove CalCircleTargetPos((PatrolStateCircleMoveData)data),EPatrolType.PathMove CalPathTargetPos((PatrolStatePathMoveData)data),_ throw new ArgumentOutOfRangeException(nameof(moveType), moveType, null)};...}/// summary/// 更新圆形范围目标位置/// /summaryprivate Vector3 CalCircleTargetPos(PatrolStateCircleMoveData data) { ... }/// summary/// 更新路径范围目标位置/// /summaryprivate Vector3 CalPathTargetPos(PatrolStatePathMoveData data) { ... }... }2.2.2 ChaseState / AttackState / BackState ​ 该 3 个状态都遵循以下大致框架 using UnityEngine;public class ...State : BaseState {private ...StateData _data;public override EAIState AIState { get ...; }public AttackState(StateMachine stateMachine) : base(stateMachine) {// 加载数据var data Resources.Load...StateData(StateData/.../...StateData);_data Object.Instantiate(data);}public override void OnStateEnter() { ... }public override void OnStateUpdate() { ... }public override void OnStateExit() { ... }... }2.3 StateMachine ​ AddState()、ChangeState() 和 UpdateState() 逻辑如下 /// summary /// 添加 AI 状态 /// /summary public void AddState(EAIState state) {switch (state) {case EAIState.Patrol:_stateDic.Add(state, new PatrolState(this));break;case EAIState.Back:_stateDic.Add(state, new BackState(this));break;case EAIState.Chase:_stateDic.Add(state, new ChaseState(this));break;case EAIState.Attack:_stateDic.Add(state, new AttackState(this));break;default: throw new ArgumentOutOfRangeException(nameof(state), state, null);} }/// summary /// 切换状态 /// /summary /// param namestate/param public void ChangeState(EAIState state) {_nowState?.OnStateExit(); // 退出状态if (_stateDic.TryGetValue(state, out BaseState nowState)) { // 进入状态_nowState nowState;_nowState.OnStateEnter();} }/// summary /// 更新当前状态 /// /summary public void UpdateState() {_nowState?.OnStateUpdate();_nowState?.DrawGizmos(); // 辅助绘图 }​ 2.4 Monster ​ 怪物类实现了 IAIObject 接口详见 2024-07-12 Unity AI状态机1 —— 框架介绍通过 Unity 导航系统中的 NavMeshAgent 实现基本移动。除了 IAIObject 接口还包含一些自己的数据。 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;public class Monster : MonoBehaviour, IAIObject {public Transform targetTransform; // 目标位置public GameObject bullet; // 子弹public float attackRange 3; // 攻击范围private Quaternion _startRotation; // 记录开始攻击时的角度private Quaternion _targetRotation; // 记录目标角度private float _rotateTime; // 旋转计时private NavMeshAgent _navMeshAgent; // 导航代理private StateMachine _aiMachine; // AI 状态机private void Start() {_navMeshAgent GetComponentNavMeshAgent();BornPos transform.position;_aiMachine new StateMachine();_aiMachine.Init(this);// 为 AI 添加巡逻状态_aiMachine.AddState(EAIState.Patrol);_aiMachine.AddState(EAIState.Chase);_aiMachine.AddState(EAIState.Attack);_aiMachine.AddState(EAIState.Back);// 更改初始状态_aiMachine.ChangeState(EAIState.Patrol);}private void Update() {_aiMachine.UpdateState();}#region IAIObject 接口实现...#endregion }3 其他功能 ​ 为了辅助绘图为 BaseState 添加了 DrawGizmos() 方法virtual子类可以实现该方法在 Scene 窗口中绘制辅助线。同时在 BaseState 中添加 DistanceOfXZ() 方法以便所有状态都可使用。以下是 BaseState 的全部逻辑 using UnityEngine;/// summary /// 状态基类 /// /summary public abstract class BaseState {public virtual EAIState AIState { get; } // 状态类型protected StateMachine _stateMachine; // 附属的状态机public BaseState(StateMachine stateMachine) {_stateMachine stateMachine;}public abstract void OnStateEnter();public abstract void OnStateUpdate();public abstract void OnStateExit();/// summary/// 辅助绘制范围不强制重写/// /summarypublic virtual void DrawGizmos() { }/// summary/// XZ 平面上的距离/// /summaryprotected float DistanceOfXZ(Vector3 pos1, Vector3 pos2) { ... } }​ 辅助绘图时使用 Unity Asset Store 中的插件 DrawXXL 实现例如 ChaseState 中的 DrawGizmos 如下 public override void DrawGizmos() {var aiObject _stateMachine.AIObject;// 绘制攻击范围DrawShapes.Circle(aiObject.Transform.position, aiObject.AttackRange, Color.red,Vector3.up, lineWidth: 0.05f);// 绘制脱离范围DrawShapes.Circle(aiObject.Transform.position, _data.chaseDistance, new Color(1, 0.5f, 0),Vector3.up, lineWidth: 0.05f, outlineStyle: DrawBasics.LineStyle.dotted); }4 类图
http://www.dnsts.com.cn/news/45789.html

相关文章:

  • 果洛wap网站建设比较好如何给网站做seo
  • 福州市建网站公司个人建站需要多少钱
  • 做个人网站需要哪些打开陕西建设厅网站
  • 网站添加google地图html简单网页代码作业
  • 网站的域名和密码国外网站建设素材
  • 做网站用不用thinkphp企业形象广告设计
  • 外贸网站装修手机网站怎么做淘宝客
  • 金融网站开发wordpress 外贸主题
  • 希音电商网站如何做网站排名第一
  • 外贸工艺品网站建设提升关键词
  • 建立问答类的网站山东网站备案时间
  • 打渔网站建设网销怎么销售的
  • 公司网站域名是什么意思比较好的软件开发公司
  • 网站后台管理规定外贸网站定制
  • 网站建设中源代码网站建设重庆最加科技
  • 公司网站后台更新一个网站的制作过程
  • 网站开发合同售后服务营销策略英文
  • 北京商业设计网站微网站 手机网站
  • 人社网站行风建设的建设和意见自己做的html网页怎么发布
  • 学校网站建设 效果怎么创建属于自己的平台
  • vs做网站连数据库阿里云虚拟主机安装wordpress
  • 国外手表网站三元区建设小学网站
  • 北京网站建设推广服务信息国内软件上市公司排行榜
  • 企业网站成功案例长沙银狐做网站
  • 免费的课程设计哪个网站有wordpress小夜
  • 迅睿cms建站教程钢球 东莞网站建设
  • 湖南张家界网站建设学生个人网页制作html
  • 深圳专门网站制作网站的设计思路怎么写
  • 网站建设推广 公司网站开发和软件开发那个简单
  • 网站建设丿金手指15discuz 轉wordpress