Unity 2D RPG项目---敌人状态机框架

文章目录

概要

C#敌人状态机是一种基于状态的编程模式,用于管理敌人在游戏中的各种状态和行为。状态机通常被分为几个状态,例如待机、追逐、攻击和逃跑等。每个状态都具有特定的条件和动作,用于确定该状态下的敌人行为。状态机可以通过条件转换实现状态之间的转移,例如在追逐状态下,如果敌人距离玩家太远,则转换到待机状态。状态机可以帮助游戏开发者更好地掌控敌人行为,提高游戏逼真度和游戏体验。

整体架构流程

我们首先创建三个c#脚本

<EnemyStateMachine > <EnemyState> <Enemy>

Enemy 开始状态机

三个脚本中只有Enemy继承MonoBehaviour,在其中定义我们所需要的组件并持续更新整个状态机并传给游戏。

这里只设置可读属性:public Rigidbody2D rb {  get; private set; }

受保护的组件可以避免我们在unity前端更改属性,造成前后端数据不一致的问题。

using UnityEngine;

public class Enemy : MonoBehaviour
{
    //定义受保护得组件
    public Rigidbody2D rb {  get; private set; }

    public Animator anim { get; private set; }

    public EnemyStateMachine stateMachine{ get;private set; }

    //唤醒控制器
    private void Awake()
    {
        stateMachine=new EnemyStateMachine();
    }
    private void Update()
    {
        //持续更新敌人配置
        stateMachine.currentState.Update();
    }
}

EnemyState 状态配置参数

在这里我们定义三种状态Update(更新)Enter(进入) Exit(退出),将传来的参数进行处理并传给 Enemy 。定于状态行为,确定状态之间的转换条件,根据上一步确定的转换条件,实现状态转换的逻辑。可以使用状态机或者条件判断等方式实现。

using System.Collections;
using UnityEngine;

public class EnemyState
{
    //状态机
    protected EnemyStateMachine stateMachine;
    //敌人
    protected Enemy enemy;
    //触发器
    protected bool triggerCalled;
    //定时器
    protected float stateTimer;
    //动画
    private string animBoolName;
   
    public EnemyState(Enemy _enemy,EnemyStateMachine _stateMachine,string _animBoolName)
    {
        this.enemy = _enemy;
        this.stateMachine = _stateMachine;
        this.animBoolName = _animBoolName;
    }
    //更新状态
    public virtual void Update()
    {
        stateTimer-=Time.deltaTime;
    }
    //进入状态
    public virtual void Enter() {
        triggerCalled = false;
        enemy.anim.SetBool(animBoolName, true);
    }
    //退出状态
    public virtual void Exit()
    {
        enemy.anim.SetBool(animBoolName,false);
    }
}

EnemyStateMachine 定义状态

using UnityEngine;

public class EnemyStateMachine 
{
    //敌人配置
   public EnemyState currentState {  get; private set; }
    //初始化状态
    public void Initialize(EnemyState _statrtState)
    {
        currentState = _statrtState;
        currentState.Enter();
    }
    //改变状态
    public  void ChangeState(EnemyState _newState)
    {
        currentState.Exit();
        currentState= _newState;
        currentState.Enter();
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity2D RPG手游源码是一种可用于制作角色扮演类手游的代码基础。Unity是一款游戏引擎,而2D RPG则代表游戏类型为二维角色扮演。通过使用Unity2D RPG手游源码,开发者可以快速搭建一个具备角色选择、剧情交互、战斗系统、升级系统等基本要素的手游。 该源码通常包含了游戏的各种元素和功能的实现代码,如角色控制、任务系统、道具系统、技能系统等。使用源码可以节省开发时间,同时也便于开发者进行二次开发和定制。 对于想要制作二维角色扮演类手游的开发者来说,Unity2D RPG手游源码是一个很好的起点。通过学习和修改源码,开发者可以根据自己的需求来制作出具备独特特色的游戏。 值得一提的是,源码只是游戏开发的一部分,还需要配合各种素材和资源进行开发。开发者需要设计游戏世界的地图、角色、怪物和场景,同时编写数值平衡和游戏逻辑等。所以除了掌握源码,开发者还需要具备一定的美术和设计能力。 总之,Unity2D RPG手游源码是制作二维角色扮演类手游的基础代码。通过学习和修改源码,开发者可以制作出符合自己需求的游戏,并需要配合素材和资源进行完整的开发工作。 ### 回答2: Unity2D RPG 手游源码是用于开发二维角色扮演游戏的解决方案。该源码提供了一系列游戏开发所需的基本功能和特性,以便开发者能够快速搭建和定制自己的RPG游戏。 在Unity2D RPG 手游源码中,通常会包括以下主要功能: 1. 角色控制:该源码提供了用于角色移动、跳跃、攻击和技能释放等动作控制的功能。开发者可以根据游戏需求进行自定义调整。 2. 物品系统:该源码通常包含物品的管理系统,可以实现物品的获取、使用和存储。开发者可以轻松添加各种装备、道具和消耗品。 3. NPC 交互:该源码提供了与非玩家角色(NPC)进行对话、任务接取和完成等交互功能。开发者可以添加自己的任务和对话系统。 4. 角色属性:该源码通常包括角色的属性系统,例如生命值、魔法值、攻击力和防御力等。开发者可以调整属性数值来平衡游戏玩法。 5. 场景管理:该源码提供了场景之间的切换和加载功能,使得开发者可以构建出一个连贯的游戏世界。 6. 性能优化:该源码通常会包含一些优化技巧,以确保游戏在不同设备上有平稳的运行体验。 总体来说,Unity2D RPG 手游源码是一个强大且灵活的解决方案,可以帮助开发者更轻松地构建自己的角色扮演游戏。通过使用该源码,开发者可以加速开发进程,同时还可以根据自身需求对游戏系统进行自定义和扩展。 ### 回答3: Unity2D RPG 手游源码是一套用于制作角色扮演类手游的代码资源。Unity是一款流行的游戏开发引擎,2D表示游戏是以平面的方式进行展示,RPG是角色扮演游戏的缩写。 这套源码提供了一些基础的游戏功能,比如角色的移动、攻击、升级、装备等。通过使用这些源码,开发者可以快速搭建起一个简单的RPG手游框架,并在此基础上添加更多自定义的功能和内容。 源码中通常包含了角色的属性和能力系统,游戏地图的编辑器,角色控制脚本,敌人AI脚本等。开发者可以在此基础上进行扩展和修改,以适应自己的游戏需求。 使用Unity2D RPG 手游源码可以大大节省游戏开发的时间和精力,因为它提供了一个已经实现了一些常见功能的蓝图。同时,它还可以作为学习游戏开发的工具,通过研究源码中的实现方式和逻辑,开发者能够更好地理解和掌握游戏开发的技术。 然而,使用源码也需要具备一定的编程知识和经验。开发者需要熟悉Unity引擎以及C#编程语言,才能使用源码进行修改和定制。 总之,Unity2D RPG 手游源码是一种快速开发角色扮演类手游的解决方案,它提供了基础功能和框架,可以帮助开发者节省时间和精力。但在使用之前需要具备一定的编程知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值