unity3d WayPoint路点寻路,AI

article/2025/10/13 12:00:06

前言

一个简单的人工智能WayPoint
WayPoint: 游戏中敌人根据几个巡逻点自动巡逻,在巡逻过程中,时刻监听英雄(敌人)和自己距离是否达到追击范围(不巡逻,追击英雄),在追击过程中,监听是否达到攻击范围(不追击,攻击)。

所需对象

  1. 当前玩家
  2. 敌人
  3. 3个巡逻点
    1

每个对象的脚本

2

脚本类

1.巡逻点 ,这里给每个巡逻点添加这个类,并拖入这个巡逻点的下一个巡逻点

public class WayPoint : MonoBehaviour {public WayPoint NextWayPoint;
}

2.控制玩家移动脚本

public class PlayerMove : MonoBehaviour {void Update () {float h = Input.GetAxis ("Horizontal"); //x轴 adfloat v = Input.GetAxis ("Vertical");//z轴 wstransform.Translate (h * Time.deltaTime * 2, 0, 0);transform.Translate (0, 0, v * Time.deltaTime * 2);}
}

3.敌人巡逻AI,发现玩家就追击玩家,到一定距离攻击

using UnityEngine;
using System.Collections;
/// <summary>
/// Enemy AI.
/// 敌人的AI,
/// 1. 3个点之间的巡逻
/// 2. 追击,攻击英雄
/// </summary>
public class EnemyAI : MonoBehaviour {public WayPoint _startWayPoint;WayPoint _targetWayPoint;public GameObject _playerPoint;GameObject _targetPoint;void Start(){_startWayPoint = GameObject.Find ("WayPoint1").GetComponent<WayPoint> ();_playerPoint = GameObject.Find ("Player");Vector3 v = _startWayPoint.transform.position;// < 某值,根据实际值计算if (Vector3.Distance (v, transform.position) < 0.5f) {_targetWayPoint = _startWayPoint.NextWayPoint;} else {_targetWayPoint = _startWayPoint;}StartCoroutine (MyAI());}//第一种在Update里,使用主进程来写/*void Update(){//巡逻前提->不用追击英雄Debug.Log("update...");//判断是否到达追击的范围if (Vector3.Distance (transform.position, _playerPoint.transform.position) < 5) {Debug.Log ("发现玩家...");if (Vector3.Distance (transform.position, _playerPoint.transform.position) < 1) {//播放攻击动画Debug.Log ("攻击动画...");} else {//追击Debug.Log ("追击中...");_targetPoint = _playerPoint;transform.LookAt (_targetPoint.transform);transform.Translate (Vector3.forward * Time.deltaTime*2f, Space.Self);}} else {//巡逻Debug.Log ("巡逻中...");Vector3 v = _targetWayPoint.transform.position;if (Vector3.Distance (transform.position, v) < 0.5f) {_targetWayPoint  = _targetWayPoint.NextWayPoint;Debug.Log("巡逻下一个点"+_targetWayPoint.name);}transform.LookAt (_targetWayPoint.transform.position);transform.Translate (Vector3.forward * Time.deltaTime*2f, Space.Self);}}
*///以下使用协程来写//巡逻IEnumerator MyAI(){while (true) {Vector3 v = _playerPoint.transform.position;if (Vector3.Distance (transform.position, v) > 5f) {Debug.Log ("巡逻中...");Vector3 nextP = _targetWayPoint.transform.position;if (Vector3.Distance (transform.position, nextP) < 0.5f) {Debug.Log ("走下一个巡逻点");_targetWayPoint = _targetWayPoint.NextWayPoint;yield return new WaitForSeconds (1);} transform.LookAt (_targetWayPoint.transform);transform.Translate (Vector3.forward * Time.deltaTime, Space.Self);} else {//Debug.Log ("发现玩家");yield return StartCoroutine (MyNewAI ());}yield return new WaitForEndOfFrame ();}}//追击IEnumerator MyNewAI(){while (true) {Vector3 PPos = _playerPoint.transform.position;if (Vector3.Distance (transform.position, PPos) > 5) {Debug.Log ("玩家超出追击范围,继续巡逻...");yield break;} else {if (Vector3.Distance (transform.position, PPos) < 1) {Debug.Log ("攻击中...");} else {Debug.Log ("追击玩家...");_targetPoint = _playerPoint;transform.LookAt (_targetPoint.transform.position);transform.Translate (Vector3.forward * Time.deltaTime, Space.Self);}}yield return new WaitForEndOfFrame ();}}
}

总结

  1. 这个WayPoint路点寻路AI,其实一开始就一直在检查、获取玩家距离,
  2. 如果玩家玩家距离过大,就进行巡逻逻辑
  3. 当玩家进入设置的距离范围时,则调用追击、攻击的逻辑

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

相关文章

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

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

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

以上思维导图&#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的官方网…