unity有限状态机和模糊状态机(怪物AI、自动寻路)

这篇具有很好参考价值的文章主要介绍了unity有限状态机和模糊状态机(怪物AI、自动寻路)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动寻路步骤:

1、把场景中不同的物体勾选static

2、烘培寻路网格

3、添加NavMeshAgent组件

4、给需要寻路的物体添加脚本

游戏中有限状态机的体现:小怪的巡逻和追逐功能

模糊状态机的体现:当玩家离小怪比较近时,小怪会追逐玩家,当玩家离小怪比较远时小怪会停止追逐玩家并且回到出生点,这里的比较近和比较远就是一个模糊概念。在游戏的设计中,是以小怪为圆心,8为半径画圆,当玩家出现在这个范围内,小怪就会追逐玩家,当玩家超出这个范围,小怪就会停止追逐玩家。

1、新建一个plane,window->AI->Navigation,然后在右边就会有Navigation。(如果敌人的路径不是在平面上,选择你要追踪的路径即可,这里是在平面上进行追踪,所以对plane进行烘焙)

unityai寻路,unity,unity,游戏引擎

 2、点击右侧的Navigation,选中plane,设置参数如下,然后点击Bake,点击右下角的Bake进行烘焙网格。(这里是2018.3.6版本,有些版本的Bake在Object界面,找到Bake进行烘焙即可),烘焙完成后可以看到plane变成下面这个样子,说明烘焙成功。

unityai寻路,unity,unity,游戏引擎unityai寻路,unity,unity,游戏引擎

 3、导入敌人,这里导入的是资源商店中的资源,(下图最上面那个,它包含两个角色,我用到了其中的一个),导入后把预制体拖到场景中,命名为monster,然后修改他的角色控制器(它原有的状态有很多,但是我这里只用到了巡逻和追逐两个状态),具体操作如下。

unityai寻路,unity,unity,游戏引擎

 1)新建角色控制器

unityai寻路,unity,unity,游戏引擎

 2)把两个状态拖入角色控制器中,这里选择了以下两种,可根据需求修改

unityai寻路,unity,unity,游戏引擎

3)新建一个bool型来控制状态转换,对两个箭头的设置如下(右侧)

unityai寻路,unity,unity,游戏引擎  unityai寻路,unity,unity,游戏引擎

 4)把角色控制器赋予monster,并给monster添加刚体和碰撞。

unityai寻路,unity,unity,游戏引擎

3、添加网格代理,网格代理的参数可适当改变。

unityai寻路,unity,unity,游戏引擎

 4、写代码,把代码赋予monster,当玩家与monster的距离小于8时,monster追踪玩家,当距离大于8时,monster停止追踪并回到原来的位置,代码如下:文章来源地址https://www.toymoban.com/news/detail-756905.html

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class MosterController : MonoBehaviour
{
    private Animator _animator;
    public Transform player;
    private float distance;
    public NavMeshAgent agent;
    Vector3 sta;
    // Start is called before the first frame update
    void Start()
    {
        _animator = GetComponent<Animator>();
        sta = this.transform.position;
        _animator.SetBool("isattack", false);
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 playerPosition = player.transform.position;
        Vector3 ZombieToPlayer = playerPosition - this.transform.position;
        distance = ZombieToPlayer.magnitude;
        if (distance < 8f)
        {
            _animator.SetBool("isattack", true);
            agent.destination = player.position;
            this.transform.LookAt(player);
           
        }
        else
        {
            _animator.SetBool("isattack", true);
            agent.destination = sta;
        }
    }
}

到了这里,关于unity有限状态机和模糊状态机(怪物AI、自动寻路)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Unity中实现有限状态机

    本文将介绍Unity开发中的有限状态机,给出对应的实现代码。 有限状态机借鉴了图灵机的思想,可以看作是最简单的图灵机。 它包含4要素: 现态 条件 动作 次态 基础的有限状态机不复杂,无非是几个状态定义成类,提供OnEnter/OnExit/OnUpdate方法,这里直接根据需求给出对应的

    2024年02月05日
    浏览(38)
  • Unity进阶开发-FSM有限状态机

    # Unity进阶开发-FSM有限状态机 我们在进行开发时,到了一定程度上,会遇到数十种状态,继续使用Unity的Animator控制器会出现大量的bool,float类型的变量,而这些错综复杂的变量与Animatator控制器如同迷宫版连线相结合会变得极其的复杂且无法良好维护扩展,出现一个BUG会导致

    2024年02月08日
    浏览(34)
  • KMP算法 - 确定有限状态自动机

    子串匹配问题,拍脑袋一下子想出来的暴力解法大抵都是两重for循环,不断重复扫描主串,与子串进行匹配,重复换句话讲就是冗余,会有很高的时间复杂度 我先前博客大作业发的 模糊查找算法 就是如此,我那里是在计算一个匹配度的问题,通过相同定位到相同字母判定开

    2024年02月09日
    浏览(33)
  • 如何基于FSM有限状态机实现Enemies AI

    本文简单介绍如何基于FSM有限状态机实现Enemies AI,首先定义敌人的AI逻辑:默认状态下Enemy为巡逻状态,有若干巡逻点位,Enemy在这些点位之间来回巡逻走动,同时检测Player的位置,当Player进入一定范围内时,Enemy进入寻路状态,寻路到Player位置前,进入Attacking攻击状态,当

    2023年04月09日
    浏览(26)
  • Unity | 渡鸦避难所-6 | 有限状态机控制角色行为逻辑

    有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 在游戏开发中应用有限状态机,能够将复杂的行为逻辑分解为一组简单的状态和转换规则,每个状态都可以独立地处理其逻辑,使代码

    2024年01月16日
    浏览(34)
  • Unity实现简单自动寻路,自动导航

    Unity实现简单自动寻路,自动导航

    2024年02月07日
    浏览(36)
  • 【Unity自动寻路】使用Navigation系统实现物体自动寻路绕开障碍物

    知识点流程图 我们在游戏场景中经常会有一些障碍物、墙壁、树木等等,如果我想要让角色或者怪物去墙的另一边,我直接在墙另一边点击左键,我希望角色自动跑过去,但是他不能直接穿透墙,他需要“智能”的绕开障碍物,自动找到可以走的路,自己过去!这就是Unity

    2024年02月03日
    浏览(32)
  • Unity(四十七):寻路网格-内置组件实现自动寻路避障

    配置寻路区域 Navigation Static 配置静态游戏对象 Navigation Static 导航网格生成 Navigation 在 Navigation 窗口进行烘焙(菜单: Window AI Navigation )中进行处理的 自动寻路并绘制路线 Nav Mesh Agent 、 NavMeshPath 属性 功能 Agent Size Radius 代理的半径,用于计算障碍物与其他代理之间的碰撞

    2024年01月15日
    浏览(38)
  • Unity通用有限状态机的从零搭建手册(一):阵前磨枪

    前言 本文的创作目的是总结工作中累积的经验和成果,并通过写教学文章的方式进行巩固和查漏补缺,在不足之处加以改进,工作时由于时间原因没有实现的一些设计也会借这次机会进行补完。我会在写文章的过程中和读者一起从新开始搭建和优化一个状态机系统以及一个应

    2024年02月02日
    浏览(34)
  • Unity丨自动巡航丨自动寻路丨NPC丨

    提示:这里可以添加技术概要 本文功能是制作一个简单的自动巡逻的NPC,随机自动寻路。 注意代码要挂载在NPC身上,并且确定要挂载Rigidbody 组件 可以把组件的旋转X和z关掉就只有前后和左右旋转了。 后期功能可以自己扩展,功能简单但是实用。

    2024年01月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包