Laya游戏开发中AI寻路解决方案

2024-01-04

1.AI自动寻路:

机器人代码重构,按照目标点去执行逻辑,提前几帧判断直线,非直线的情况下,预设转弯角度,角度判断到达直线后开始执行到目标点的逻辑

2.U3D布点寻路

3.NevMesh.Js寻路插件

NevMesh.Js你可以在Laya引擎中直接使用的AI寻路 - 简书

Demo演示: www.layabox.com

(1)U3D中使用NavMesh寻路系统,对障碍物就行烘焙,也就是对场景中的物体进行标记,然后烘焙路径,产生网格数据;为需要进行寻路的物体添加寻路组件NavMeshAgent,通过NavMeshAgent组件的属性或方法进行移动

选中场景中所有障碍物和地面对象,勾选Navigation Static

(2)cs文件拖入U3D项目中:

然后 LayaAir3D中出现NavMesh导出, 然后会在工程目录生成一个ExportNavMesh文件夹,里面的文件就是导出的NavMesh模型obj文件

(3) 这时候需要将导出的obj文件利用转换工具转换成json格式的文件,让Laya读取

运行转化代码:

python convert_obj_three.py -i testScene.obj -o out.json

(4)项目使用的脚本,将NevMesh.js放到项目bin/libs文件夹中,将NevMesh.d.ts放到项目libs文件夹中,在bin/index.js中增加loadLib("libs/NevMesh.js"),注意需在loadLib("js/bundle.js");前面

loadLib("libs/NevMesh.js")
//-----libs-end-------
loadLib("js/bundle.js");

(5)加载导出的.json文件

this.navUrl="meshes/outfile.json";

Laya.loader.load(this.navUrl,Laya.Handler.create(this,this.onNavLoaded),null,"json");

onNavLoaded(){
    var json=Laya.loader.getRes(this.navUrl);
    let zoneNodes =  NevMesh.buildNodesByJson(json);
    NevMesh.setZoneData('game',zoneNodes);
    this.playerNavMeshGroup = NevMesh.getGroup('game', this.player.transform.position);
}

(6)初始化寻路对象:

this.player=sceneLoad.getChildByName("player");
this.physicsSimulation=sceneLoad.physicsSimulation;  //物理模拟器


this.agent=null;
this.agent=this.player.addComponent(NavMeshAgent);
this.agent.speed=10;

(7)鼠标点击目标位置点,射线检测,开始寻路:

//创建射线
this.ray=new Laya.Ray(new Laya.Vector3(),new Laya.Vector3());
//射线检测结果
this.hitResult=new Laya.HitResult();
    this.camera.viewportPointToRay(new Laya.Vector2(Laya.stage.mouseX,Laya.stage.mouseY),this.ray);
        if(this.physicsSimulation.rayCast(this.ray,this.hitResult)){
            console.log("000");
            this.targetPos=this.hitResult.point;
            let calculatedPath = NevMesh.findPath(this.player.transform.position,this.targetPos, 'game',this.playerNavMeshGroup);


            if (calculatedPath && calculatedPath.length){
                var debugPath=(calculatedPath);
                console.log("start",this.player.transform.position.x,this.player.transform.position.y,this.player.transform.position.z);
                var p=[];
                for (var i=0;i < debugPath.length;i++){
                    console.log(debugPath[i].x,debugPath[i].y,debugPath[i].z);
                    p.push(new Laya.Vector3(debugPath[i].x,debugPath[i].y+.1,debugPath[i].z));
                }
               
                this.agent.path=[this.player.transform.position].concat(p);
                this.agent.enabled=true;
                console.log("end",this.targetPos.x,this.targetPos.y,this.targetPos.z);
            }
            else{
                this.agent.enabled=false;
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laya游戏开发中AI寻路解决方案 的相关文章

随机推荐

  • 用C语言采集游戏平台数据并做行业分析

    游戏一直深受90 00后的喜爱 有些人因为对游戏的热爱还专门成立了工作室做游戏赚钱 但是游戏行业赚钱走不好就会被割一波韭菜 那么现在什么游戏挣钱 什么游戏好玩认可度高 带着这样的问题我将利用我毕生所学 写了下面一段爬虫程序 这是一个用C 编
  • 夺冠!特等奖!实在Agent智能体闪耀“2023首届全国人工智能应用场景创新挑战赛总决赛”

    为贯彻落实国务院 新一代人工智能发展规划 及科技部 教育部等六部委联合印发的 关于加快场景创新 以人工智能高水平应用促进经济高质量发展的指导意见 中国人工智能学会 科技部新一代人工智能发展研究中心 东莞市人民政府 联合发起主办 2023首届
  • Redis生产环境最佳实践

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文
  • macbook录屏快捷键大全,教你快速录制视频

    有人知道macbook电脑有录屏快捷键吗 现在录屏的速度太慢了 每次打开都要浪费不少时间 要是有录屏快捷键 应该会快很多 有哪位大佬知道吗 教教我 无论是在工作还是生活中 电脑已成为不可或缺的工具 而macbook作为苹果公司推出的一款笔记
  • MIT_线性代数笔记:第 23 讲 微分方程和 exp(At)

    目录 微分方程 Differential equations 矩阵指数函数 Matrix exponential e A t e At
  • SSM+数据库原理课程考试网站-计算机毕业设计源码78952

    摘 要 信息化社会内需要与之针对性的信息获取途径 但是途径的扩展基本上为人们所努力的方向 由于站在的角度存在偏差 人们经常能够获得不同类型信息 这也是技术最为难以攻克的课题 针对在线考试等问题 对如何通过计算机在线考试进行研究分析 然后开发
  • Kotlin采集美团商家信息 同行竞争价格监控

    南方小土豆 挤爆哈尔滨旅游市场 一个冬天让哈尔滨火出了圈 让全国观众看见了不一样的逆向旅游热 虽说我心驰神往 但是无奈加班敲代码 连休息的时间都没有 前段时间我通过用java写了一个美团爬虫程序 今天我 利用java的Kotlin库来写个美
  • gitlab高级功能之Kubernetes Agent介绍

    文章目录 1 前置条件 2 简介 3 GitLab Kubernetes Agent 的部署 3 1 启用 Agent 服务端 3 2 创建 Agent 配置和清单仓库 4 安装agent
  • 景联文科技GPT教育题库:AI教育大模型的强大数据引擎

    GPT 4发布后 美国奥数队总教练 卡耐基梅隆大学数学系教授罗博认为 这个几乎是用 刷题 方式喂大的AI教育大模型的到来 意味着人类的刷题时代即将退出历史舞台 未来教育将更加注重学生的个性化需求和多元化发展 借助GPT和AI教育大模型为每位
  • 振动信号数据如何制作特征?

    对振动信号进行特征提取是故障诊断和预测中常见的任务 下面是一些可能对振动信号有用的特征 时域特征 均值 Mean 标准差 Standard Deviation 峭度 Kurtosis 偏度 Skewness 峰值因子 Peak to Pea
  • 探索 OceanBase 中图数据的实现

    在数据管理和处理的现代环境中 对能够处理复杂数据结构的复杂数据模型和方法的需求从未如此迫切 图数据的出现以其自然直观地表示复杂关系的独特能力 开辟了数据分析的新领域 虽然 Neo4j 等成熟的图形数据库为处理图形数据提供了强大的解决方案 但
  • 阿里云服务器地域怎么选择?哪个地域好?

    阿里云服务器地域和可用区怎么选择 地域是指云服务器所在物理数据中心的位置 地域选择就近选择 访客距离地域所在城市越近网络延迟越低 速度就越快 可用区是指同一个地域下 网络和电力相互独立的区域 可用区之间可以做到故障隔离 将应用部署到不同可用
  • three.js使用正方体加图片实现全景看房效果

    three js使用正方体加图片实现全景看房效果 实现方法 创建一个正方体 加载6张纹理贴图 正方体z轴缩放 1 调整相机位置 图例 代码
  • 在centos7部署redis7

    一 目标 在centos7 9上部署安装redis 7 2 3 二 步骤 官网 https redis io download 1 下载合适版本的redis wget https github com redis redis archive
  • 【Python】Python中逗号转为空格的方法

    Python中将逗号转换为空格的几种方法 以及将其应用在实际开发中的示例 Python是一种功能强大的编程语言 其提供了很多内置函数 方便我们快速 高效地处理数据 一 使用replace函数 Python中的字符串函数replace可以用来
  • vue项目日期处理day.js

    dayjs安装 1 npm 安装 npm install dayjs save 2 项目使用 import dayjs from dayjs ES 2015 dayjs format 使用介绍 1 秒 获取或设置秒 接受0到59的数字 如果
  • Mybatis Plus 基础功能 BaseMapper和基础配置以及注解

    文章目录 Mybatis Plus 导入依赖 定义Mapper 约定 常见配置 Mybatis Plus 导入依赖 官网看一下也行 plus官网 spring boot3 版本
  • Python机器学习实战:用Python构建10个有趣的应用

    机器学习是一门强大的工具 可以用于解决各种各样的问题 通过学习机器学习 您可以开发出能够自动化任务 做出预测甚至创造艺术的应用程序 如果您是一名 Python 开发人员 那么您将很高兴知道 有许多可以用 Python 构建的有趣机器学习应用
  • 江河湖泊生态水文监测物联网解决方案

    方案背景 江湖湖泊具有重要的经济效益和生态效益 是重要的资源储备 近年来 各级积极采取措施 加强江河湖泊治理 管理和保护 在防洪 供水 发电 航运 养殖等方面的综合发展 随着纳入管理的江河湖泊等水体越来越多 范围越来越广 很多水污染 非法采
  • Laya游戏开发中AI寻路解决方案

    1 AI自动寻路 机器人代码重构 按照目标点去执行逻辑 提前几帧判断直线 非直线的情况下 预设转弯角度 角度判断到达直线后开始执行到目标点的逻辑 2 U3D布点寻路 3 NevMesh Js寻路插件 NevMesh Js你可以在Laya引擎