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

个人建站教程网站建设主要学什么软件

个人建站教程,网站建设主要学什么软件,网页源代码是什么,品牌营销目标文章目录 简介示例1:基础角色状态切换示例2:添加更多角色状态示例3:战斗状态示例4:动画同步状态示例5:状态机管理器示例6:状态间转换的条件触发示例7:多态行为与上下文类 简介 Unity 中的状态模…

文章目录

      • 简介
      • 示例1:基础角色状态切换
      • 示例2:添加更多角色状态
      • 示例3:战斗状态
      • 示例4:动画同步状态
      • 示例5:状态机管理器
      • 示例6:状态间转换的条件触发
      • 示例7:多态行为与上下文类

简介

Unity 中的状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变其行为。在游戏开发中,状态模式常用于实现角色的不同行为状态切换,例如玩家角色的行走、奔跑、跳跃、攻击等不同状态。下面将通过五个简化示例来阐述如何在Unity中实现状态模式:

示例1:基础角色状态切换

// 定义抽象状态类
public abstract class CharacterState
{protected Character character;public void SetCharacter(Character _character){this.character = _character;}// 抽象方法,子类需要实现具体行为public abstract void Update();
}// 具体状态类:IdleState
public class IdleState : CharacterState
{public override void Update(){Debug.Log("角色处于闲置状态");// 检查是否应该转换到其他状态,如按下移动键则切换至MoveStateif (Input.GetKey(KeyCode.W)){character.ChangeState(new MoveState());}}
}// 具体状态类:MoveState
public class MoveState : CharacterState
{public override void Update(){Debug.Log("角色正在移动");// 检查是否应返回闲置状态或切换至其他状态if (!Input.GetKey(KeyCode.W)){character.ChangeState(new IdleState());}}
}// 角色类持有当前状态并处理状态切换
public class Character : MonoBehaviour
{private CharacterState currentState;public void ChangeState(CharacterState newState){if (currentState != null){currentState.SetCharacter(null);}currentState = newState;currentState.SetCharacter(this);}void Update(){currentState.Update();}
}

示例2:添加更多角色状态

public class JumpState : CharacterState
{public override void Update(){Debug.Log("角色正在跳跃");// 跳跃动作完成后切换回Idle或Move状态if (IsJumpFinished()){character.ChangeState(currentlyOnGround ? new IdleState() : new MoveState());}}
}// 初始化时设置初始状态
void Start()
{currentState = new IdleState();currentState.SetCharacter(this);
}

示例3:战斗状态

public class CombatState : CharacterState
{// 实现战斗相关的更新逻辑,比如检测敌人、攻击等public override void Update(){Debug.Log("角色处于战斗状态");// 检查战斗是否结束,结束后切换回Idle或Run状态if (CombatIsOver()){character.ChangeState(new IdleState());}}
}

示例4:动画同步状态

public class AnimationState : CharacterState
{Animator anim;public AnimationState(Character character, Animator animator){SetCharacter(character);anim = animator;}public override void Update(){// 根据当前状态播放相应的动画switch (GetType().Name){case nameof(IdleState):anim.Play("Idle");break;case nameof(MoveState):anim.Play("Run");break;// 其他状态对应的动画...}}
}

示例5:状态机管理器

// 为了更复杂的系统,可以创建一个专门管理状态切换和维护状态栈的类
public class StateMachine
{Stack<CharacterState> stateStack = new Stack<CharacterState>();public void PushState(CharacterState newState){stateStack.Push(newState);newState.SetCharacter(character);}public void PopState(){if (stateStack.Count > 0){var oldState = stateStack.Pop();oldState.SetCharacter(null);if (stateStack.Count > 0){currentState = stateStack.Peek();currentState.SetCharacter(character);}}}// 更新调用当前栈顶状态的方法public void Update(){currentState?.Update();}
}

以上代码仅作示例,并未涵盖所有异常处理和实际项目中的细节,但足以说明如何在Unity中应用状态模式来组织和管理不同角色状态的切换。

示例6:状态间转换的条件触发

在某些情况下,角色的状态切换可能需要基于特定的游戏事件或条件。下面展示一个基于冷却时间(Cooldown)的状态切换示例:

public class AttackState : CharacterState
{private float attackCoolDown;private bool canAttack;public AttackState(float coolDownTime){attackCoolDown = coolDownTime;canAttack = true;}public override void Update(){if (canAttack && Input.GetKeyDown(KeyCode.Space)){Debug.Log("角色进行攻击");// 触发攻击动作OnAttack();canAttack = false;Invoke(nameof(ResetAttack), attackCoolDown);}}private void ResetAttack(){canAttack = true;// 攻击结束后根据情况切换至其他状态,例如Idlecharacter.ChangeState(new IdleState());}private void OnAttack(){// 实际执行攻击逻辑,如播放动画、计算伤害等}
}

示例7:多态行为与上下文类

为了进一步解耦状态和角色实体,可以创建一个抽象的上下文类(Context),由它来持有当前状态并处理状态之间的切换:

// 抽象上下文类
public abstract class CharacterContext
{protected CharacterState currentState;public virtual void ChangeState(CharacterState newState){currentState?.Exit();currentState = newState;currentState.Enter(this);}public abstract void Update();// 状态进入和退出时调用的方法public virtual void NotifyStateEnter() => currentState.Enter(this);public virtual void NotifyStateExit() => currentState.Exit();
}// 具体上下文类:游戏角色实体
public class Player : CharacterContext
{// 其他游戏相关属性...public override void Update(){currentState.Update();}// 重写以添加额外的进入/退出通知逻辑public override void NotifyStateEnter() { ... }public override void NotifyStateExit() { ... }
}// 每个状态类实现Enter和Exit方法
public class WalkState : CharacterState
{public override void Enter(CharacterContext context){// 进入行走状态时的行为,比如启动行走动画}public override void Exit(){// 退出行走状态时的行为,比如停止行走动画}
}

以上示例展示了如何通过状态模式在Unity中灵活管理角色的不同状态,并允许状态之间根据特定条件和事件平滑切换。每个具体状态类都负责自己的行为逻辑,而上下文类则统一管理这些状态的切换。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

http://www.yayakq.cn/news/378250/

相关文章:

  • 儿童网站 源码网页版微信登录入口账号登陆
  • 网站转app生成器开店加盟代理
  • 固定ip做网站汽车网站cms
  • 福田皇岗社区网站建设带端口的服务器怎么做网站
  • 京山网站制作写作网站不屏蔽
  • 搜狐快站绑定未备案的网站域名吗凡科网做网站
  • 旅游网站建设功能意义pos机做网站推广
  • 网站流量工具重庆网站建设怎么样
  • 网络版微信长沙百度关键词优化
  • 网站设计的技术方案学校网站模板注意事项
  • 国家开发银行助学贷款网站网站外链隐形框架是什么
  • 天津平台网站建设报价销售类网站开发架构
  • 山东建设厅官方网站孙松青北京的网站建设
  • 网站内容怎么写有利于排名汽车网络营销分析报告
  • 重庆做汉堡的餐饮公司网站建设租房子的网站
  • 查网站服务器ip 被k平面设计找工作
  • 做任务刷王者皮肤网站什么是电子商务系统
  • 东营网站建设教程简道云crm管理系统
  • 江西网站开发的公司wordpress固定链
  • 沧州做网站优化哪家公司便宜建站如何收费
  • 域名可以做网站名吗wordpress被植入广告插件
  • asp.net mvc网站开发之美网页设计图片剧中
  • 简单 网站平面设计正规兼职平台
  • 网站可以做视频链接英文网站制作
  • 好看的网站链接青岛外贸假发网站建设
  • 海北公司网站建设多少钱如何创作网站
  • 求网站2021给个网址百度知识营销
  • 廊坊做网站外包什么是网络营销推广
  • 广告联盟app手机版石家庄seo全网营销
  • seo信息编辑招聘深圳seo优化服务商