Unity中的AI算法和实现1-Waypoint

article/2025/10/13 11:57:58

本文分享Unity中的AI算法和实现1-Waypoint

在Unity中, 我们有一些有趣且常见的AI算法可以研究和使用, 其中最常见的就是怪物的简单AI, 比如在RPG游戏里, 怪物在某些点定点巡逻, 当玩家进入检测区域时, 怪物会主动追击玩家, 追击到玩家后对玩家进行伤害, 或者在超过最大距离后脱离追击状态, 由恢复到巡逻状态.

我们接下来几篇文章会简单的实现一个基于有限状态机的怪物AI, 这篇文章是最基础的部分, 介绍Waypoint.

Waypoint顾名思义, 是用来描述点的一个抽象概念, 简单点说就是一个一个位置, 我们的怪物向这些预先设定的位置定点巡逻.

这个算法本身非常简单:

  • 我们有一个Waypoint列表, 有一个怪物.
  • 怪物根据顺序(可以另外定义顺序算法), 向目标点转向, 位移, 到达目标点后, 继续向下一个目标点转向和位移(也可以在这个点等待一会, 观望一番后才向下一个点前进).
  • 到达最后一个目标点(数组最后一个元素), 切换到第一个目标点, 继续前进.

下面开始我们的示例.

创建场景

新建工程后, 往场景中拖一个Plane, 充当地面, 再拖一个Capsule充当怪物, 并给怪物创建一个眼睛, 用来表示方向, 最后调整一下整个场景的颜色(可选).

在这里插入图片描述

然后创建一个空的GameObject充当Waypoint容器, 然后创建空的子GameObject充当Waypoint, 我们可以给Waypoint节点增加Icon方便观察:

在这里插入图片描述

然后多创建几个Waypoint节点并摆好位置:

在这里插入图片描述

对应的Hierarchy如下:

在这里插入图片描述

最后创建控制脚本: MonsterContoller_Wp.cs并挂载到Monster身上.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Debug = UnityEngine.Debug;public class MonsterContoller_Wp : MonoBehaviour
{[SerializeField] private Transform[] m_Waypoints;[SerializeField] private float m_MoveSpeed = 10f;[SerializeField] private float m_RotateSpeed = 10f;[SerializeField] private float m_MinTargetDistance = 0.5f;/// <summary>/// 当前wp索引/// </summary>private int m_CurrentWpIndex = 0;/// <summary>/// 缓存Transform, 避免每帧使用属性获取/// </summary>private Transform m_SelfTrans;private void Start(){m_SelfTrans = transform;Application.targetFrameRate = 60;}private void Update(){var target = m_Waypoints[m_CurrentWpIndex];if (Vector3.Distance(target.position, m_SelfTrans.position) < m_MinTargetDistance){ // 已经靠近, 切换到下一个点m_CurrentWpIndex++;m_CurrentWpIndex %= m_Waypoints.Length; // 越界后从头开始target = m_Waypoints[m_CurrentWpIndex];}var targetDir = (target.position - m_SelfTrans.position).normalized;// 移动和转向m_SelfTrans.Translate(targetDir * Time.deltaTime * m_MoveSpeed, Space.World); // 匀速向forward移动Time.deltaTime * m_MoveSpeed长度的距离m_SelfTrans.rotation = Quaternion.Lerp(m_SelfTrans.rotation, Quaternion.LookRotation(targetDir), Time.deltaTime * m_RotateSpeed);}
}

代码很简单, 也有对应的注释, 这里不再赘述, 下面是效果:

在这里插入图片描述

好了, 今天的内容就是这些, 希望对大家有所帮助.


http://chatgpt.dhexx.cn/article/iIVRWgBk.shtml

相关文章

统计中的“不相关”与“线性无关”

以上思维导图&#xff0c;看完即可理解。下述是文字介绍。 这二者是统计新手与老手都很容易混淆的两个概念&#xff0c;以下辨明一下&#xff1a; 两变量“不相关” 不相关是指二者互相独立&#xff0c;没有相关关系。注如森林里每棵树的树叶个数与村子里每个村民的体重...二…

辨析“正交”与“不相关”。

①不相关的定义是&#xff1a; ②正交的定义是&#xff1a; 若两个向量的点积为零&#xff08;即对应元素相乘之后求和为零&#xff09;&#xff0c;则称两个向量正交。 ③一对正交向量一定是不相关的&#xff0c;即正交的两个向量中&#xff0c;一个向量绝不可能用另一个向量…

【数理统计】随机变量X和Y独立一定不相关,不相关不一定独立

假设(X,Y) 均匀分布在单位元 x 2 y 2 1 x^2 y^2 1 x2y21上&#xff1a; X和Y的&#xff08;线性&#xff09;相关系数是0。为什么呢&#xff1f;直观来说&#xff0c;因为是个圆&#xff0c;如果你画一条线性回归的线&#xff0c;线的斜率是正的还是负的都不合适&#xf…

mysql的相关子查询和不相关子查询

概念介绍 嵌套在其他查询中的查询即子查询&#xff0c;子查询也叫内部查询。子查询中有相关子查询和不相关子查询&#xff1a;相关子查询是指查询结果依赖于外部查询的子查询&#xff0c;外部查询每执行一次&#xff0c;内部子查询也会执行一次&#xff1b;而不相关子查询是指…

MySQL中不相关子查询和相关子查询

嵌套在其它查询中的查询称之为子查询或内部查询。 包含子查询的查询称之为主查询或外部查询 student表 course表 score表 不相关子查询 内部查询的执行独立于外部查询&#xff0c;内部查询仅执行一次&#xff0c;执行完毕后将结果作为外部查询的条件使用 select * from sco…

《数据库系统概论》之相关子查询与不相关子查询

文章目录 前言数据表一、子查询&#xff08;subquery&#xff09;二、不相关子查询&#xff08;unrelated subqueries&#xff09;1.概念2.查询逻辑 三、相关子查询&#xff08;related subqueries&#xff09;1.概念2.查询逻辑3.带有EXISTS谓词的子查询 总结 前言 开篇感言 …

变量之间的相关性研究

目录 1 什么是相关性&#xff1f;协方差及协方差矩阵相关系数&#xff08;1&#xff09;简单相关分析&#xff08;2&#xff09;偏相关分析&#xff08;3&#xff09;复相关分析&#xff08;4&#xff09;典型相关分析 2 对已有数据的预分析2.1 绘制变量相关的热力图2.2 对热力…

独立=>不相关

独立 ⇒ \Rightarrow ⇒不相关 文章目录 独立 ⇒ \Rightarrow ⇒不相关判定定理独立性 F ( x , y ) F X ( x ) F Y ( y ) F(x,y)F_X(x)F_Y(y) F(x,y)FX​(x)FY​(y)证明不独立只需要用P(AB)≠P(A)P(B)举反例离散型连续型 不相关 ρ x y 0 \rho_{xy}0 ρxy​0(协方差为0) 性质…

MySQL 不相关子查询怎么执行?

1. 概述 从现存的子查询执行策略来看&#xff0c;半连接 (Semijoin) 加入之前&#xff0c;不相关子查询有两种执行策略&#xff1a; 策略 1&#xff0c;子查询物化&#xff0c;也就是把子查询的执行结果存入临时表&#xff0c;这个临时表叫作物化表。 explain select_type …

为什么相关不等于因果

为什么相关不等于因果 十九世纪末&#xff0c;荷兰出现了一个奇怪的现象&#xff1a;人口出生率与当地白鹳的数量同步增长。鹳鸟送子的传说由此而来。虽然这个故事逐渐消失在民间传说中&#xff0c;但现实生活中类似的相关性无处不在。二十世纪和二十一世纪的新研究一再证实&a…

独立正交不相关定义关系

一、“独立”、“不相关”和“正交”的定义 假设X为一个随机过程&#xff0c;则在t1和t2时刻的随机变量的相关定义如下&#xff08;两个随机过程一样&#xff09;&#xff1a; &#xff08;1&#xff09;定义Rx&#xff08;t1&#xff0c;t2&#xff09;E{X&#xff08;t1&…

不相关、独立、正交的区别与联系

1.相关定义说明&#xff1a; 随机过程&#xff1a;X(t)和Y(t)互相关函数&#xff1a;Rxy&#xff08;t1&#xff0c;t2&#xff09;E{X&#xff08;t1&#xff09;Y&#xff08;t2&#xff09;}互协方差函数&#xff1a;Cxy&#xff08;t1&#xff0c;t2&#xff09;E{[X&…

不独立 ≠ 不相关 (Independent ≠ Uncorrelated)

在数学期望的性质里有一个性质:随机变量X和Y相互独立&#xff0c;有&#xff1a;E(XY) E(X)E(Y). 事实上这里成立的充要条件是X和Y不相关即可。 那么问&#xff0c;相互独立与不相关的关系是什么呢&#xff1f; 独立性是指两个变量的发生概率一点关系没有&#xff1b;而相关…

View For EasyUI 后台模板html

ViewUI For EasyUI View For EasyUi是基于EasyUI-1.5x开发的前端UI框架主题皮肤&#xff0c;包含所有EasyUI的全部组件美化&#xff0c; 还有各种插件&#xff0c;各种优化 &#xff0c;完全使用矢量图标&#xff0c;每一个小图标都是矢量图标&#xff0c;支持无限放大和颜色设…

easyui了解

目录 一、框架概述 1、什么是Easyui&#xff1f; 2、EasyUI的常用组件 3、EasyUI的特点 缺点 使用&#xff1a; 4、EasyUI的目录说明 4.1 下载路径 4.2 必须的基础支持库 4.3 目录说明 二、WEB项目搭建EasyUI环境 1.EasyUI入门示例 1.1 标准开发步骤 1.2 代码模板 …

JQuery EasyUI-1.5.x-Of-Insdep-Theme后台模板

简介&#xff1a; JQuery easyui 1.5.x of Insdep Theme 1.0.0 RC2&#xff0c;是基于EasyUI 1.5.x 的一款免费的美化主题包&#xff0c;拥有百度编辑器、cropper、Highcharts、justgage、plupload等各类适应本主题的第三方插件美化补丁。并且各类常用Jquery插件正在美化中。 …

easyui自学模板代码

index.jsp源码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c"%> <c:set var"ctx" value"…

easyui酷黑风格主题模板组件html

模板简介&#xff1a;基于easyui目前最新版本1.10.X设计制作&#xff0c;后期会随easyui版本进行响应更新。模板仅修改easyui默认的css样式文件&#xff0c;可以很方便的与默认主题进行替换或切换。对于已有项目&#xff0c;可以快速的替换主题&#xff0c;不影响系统功能。对e…

使用easyui快速搭建管理员主界面

使用easyui快速搭建管理员主界面 easyui主页&#xff1a;index.jspsidebarTree.json&#xff1a;左侧菜单内容 easyui easyui又叫Jquery EasyUI&#xff0c;是基于Jquery的界面框架插件&#xff0c;提供了丰富的界面功能&#xff0c;方便快速开发Web界面程序 目前easyui的官方网…

easyui poi 一个模板导出多个模板数据,在一个sheet中导出

easyui poi 一个模板导出多个模板数据&#xff0c;在一个sheet中导出 1.示例代码2.模拟数据3.导出模板4.导出效果 1.示例代码 /*** 导出excel表格** return excel 文件流*/ResponseExcelApiOperation(value "导出excel表格", notes "导出详情excel表格"…