【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--追逐

unity实现追逐和拦截 unity移动,追逐 阅读详情

增加Steering的派生类

----SteeringForPursuit类    追逐行为类

追逐行为解读图:

本案例的条件判断,通过判断

①物体朝向与目标朝向夹角的角度 ----------图中红色角度

②物体朝向与物体到目标当前位置向量所成的角度  ----------图中蓝色角度      

来让物体做出两种追逐行为:

①物体按靠近行为的方式追逐目标

②物体按预测目标移动位置来追逐目标

 

预测追逐行为解读图:

案例中:

判断条件①限制了物体朝向与目标朝向夹角少于180度---------即:控制目标与物体面向移动时不进行预测追逐

判断条件②限制了物体朝向以及目标在物体的相对方向的夹角少于90度-------即:目标不能处于物体身后

以上条件 使得目标只能在物体朝向前方的范围,以及物体与目标朝向者同一块移动区域。

目标应处于条纹区域才能触发预测追逐行为。

 

预测时间= 两目标距离矢量的长度/(物体最大速度+目标当前速度)   -----------当前还不知道是什么理论.. 案例中的公式

预测速度 = (目标位置矢量+目标速度矢量*预测时间 - 物体当前位置矢量)的标准化运算 *物体运动的最大速度

   预测速度是通过  计算出预测的目标运动后的位置,作为最终目标位置,减去物体位置向量,求出新的速度方向

通过最新的速度方向减去物体当前速度方向矢量,获得实际的操控力向量。

 

 

案例代码:

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

public class SteeringForPursuit : Steering {
    public GameObject target;
    private Vector3 desiredVelocity;
    private Vehicle m_vehicle;
    private float maxSpeed;

	// Use this for initialization
	void Start () {
        m_vehicle = GetComponent<Vehicle>();
        maxSpeed = m_vehicle.maxSpeed;
	}

    public override Vector3 Force()
    {
        Vector3 toTarget = target.transform.position - transform.position;

        float relativeDirection = Vector3.Dot(transform.forward, target.transform.forward);
        Debug.Log("relativeDirection:" + relativeDirection);
        //物体与目标朝向所成夹角的度数的范围的
        //以及物体朝向与 物体与目标距离所成向量的夹角的度数范围
        //来作为物体追逐目标时候是采取预测追逐还是靠近追逐的判断条件
        if((Vector3.Dot(transform.forward,toTarget)>0)&&relativeDirection<-0.95f)
        {
            desiredVelocity = (target.transform.position - transform.position).normalized * maxSpeed;
            return (desiredVelocity - m_vehicle.velocity);

        }

        //计算预测时间
        float lookaheadTime = toTarget.magnitude / (maxSpeed + target.GetComponent<Vehicle>().velocity.magnitude);

        //计算预测速度
        desiredVelocity = (target.transform.position + target.GetComponent<Vehicle>().velocity * lookaheadTime - transform.position).normalized * maxSpeed;

        //返回操控力向量
        return (desiredVelocity - m_vehicle.velocity);
    }
}

参考书籍:《unity3d人工智能编程精粹》 王洪源等著

《Unity3D人工智能编程精粹》笔记 Unity3D人工智能架构模型游戏AI的架构模型 Unity3D人工智能架构模型 感知:是AI角色与游戏世界的接口,负责在游戏运行过程中不断感知周围环境,读取游戏状态和数据,为思考和决策收集信息。(for example:是否有敌人接近等。) 思考:利用感知的结果选择行为,在多种可能性之间切换。(such as:战斗还是逃跑?躲到哪里?) 一般来说,这是决策系统的任务,有时也可能简单地与感知合二为一。 行动:发出命令、更新状态、寻路、播放声音动画,也包括生命值减少等。这是运动系统、动画系统和物理系统的任. 阅读详情

相关推荐

(unity3d)C# 类型系统详解

昨天面试,面试官问:你对C#方法参数有什么认识? 可怜的我只知道C++中方法参数传递中有按值,按引用,按指针。在拷贝构造函数中有深拷贝和浅拷贝(浅拷贝只拷贝引用或者指针,即只有一个被拷贝对象的引用或指针的副本,并没有在内存堆里new)。 可怜的我之前虽然知道C#有两大基础类型:值类型和引用类型,但确实木有深入了解过。对其装箱和拆箱操作也只知皮毛。 …然后就尬聊了C++的方法参数,-_-|| 言...

vc43vc的专栏 862

【Unity3D】导弹追逐问题

问题描述 已知 A、B 两点的位置、速度、加速度,求 B 追上 A 的时间及位置。 代码 控制 A、B 两个物体运动的脚本。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Motor : MonoBehaviour { public float initialVelocity; public float acceleratedVelocity;

码农生涯 490

04 Unity3D人工智能AI-追逐

using UnityEngine; using System.Collections;public class SteeringForPursuit : Steering { public GameObject target; private Vector3 desiredVelocity; private Vehicle m_vehicle; private flo

Circle 2711

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------AI角色的感知方式-视觉感知实现解读

视觉感知: sightSensor 与 sightTrigger 实现 视觉感知前提: 需要判断是否有物体的视觉触发器处于其他物体的视觉感知器的范围内   感知视觉触发器的感知器-------sightSensor类 可视角度, 最远可视距离 绘制可视距离 绘制与视觉目标的连线 判断是否被视觉感知器触发的触发器--------sightTrigger类 判断感知器是否为视觉感知器...

Terrell21的博客 1078

【愚公系列】2022年02月 U3D全栈班 012-Unity游戏对象和脚本

文章目录一、Unity的对象与脚本关系1.认知熟悉Unity中的对象2.脚本的认知与使用二、Unity的对象1.GameObject游戏对象2.Component组件对象三、Unity中对象与脚本中的类型对应1.引用类型:存储对象的引用2.值类型:存储对象的值四、Unity中的脚本1.继承与引用2.可视化(序列化)3.脚本操作Unity对象 一、Unity的对象与脚本关系 游戏开发,其实就是把图片,模型,声音,UI等内容,整合成一个完整的应用程序,这个整合的过程离不开脚本/代码的参与。 脚本语言主要有:C

愚公智库 3万+

【愚公系列】2022年02月 U3D全栈班 002-Unity游戏结构和游戏开发流程

文章目录一、Unity游戏结构二、Unity开发流程三、Unity3D的Helloworld1.纯拖界面的Helloworld2.Unity3D脚本的Helloworld总结 一、Unity游戏结构 游戏结构主要有: 场景 游戏对象 组件 属性 二、Unity开发流程 1、创建项目 2、准备资源素材 在线资源素材网站:https://assetstore.unity.com/ –导入资源(图片、声音、3D模型…) –创建资源(材质、动画…) 3、构建场景 –添加游戏对象 –操纵游戏对象完成游戏逻辑

愚公智库 3万+

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--徘徊

增加Steering的派生类 ----SteeringForWander类    徘徊行为类 解读: ①初始化过程,通过半径确定圆周上的一个点。(案例中通过确定一个X=Y的点(x,y)). 通过圆心公式: 圆心为(0,0)半径为r 又因为X=Y 我们可以算出关系式      所以初始化点的坐标为  Vector3(,0,)     A) 案例生成随机点的公式,通过随机值以及...

Terrell21的博客 1359

2022-02-11 U3D全栈班 002-Unity游戏结构和游戏开发流程

文章目录一、Unity游戏结构二、Unity开发流程三、Unity3D的Helloworld1.纯拖界面的Helloworld2.Unity3D脚本的Helloworld总结 一、Unity游戏结构 游戏结构主要有: 场景 游戏对象 组件 属性 二、Unity开发流程 1、创建项目 2、准备资源素材 在线资源素材网站:https://assetstore.unity.com/ –导入资源(图片、声音、3D模型…) –创建资源(材质、动画…) 3、构建场景 –添加游戏对象 –操纵游戏对象完成游戏逻辑

微软MVP Eleven 2万+

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--靠近/逃跑

以上一篇文章基类为基础,增加Steering的派生类 ----SteeringForSeek类 靠近行为类。 ----SteeringForFlee类 逃跑行为类。 靠近行为解读: 靠近行为类就是为问题提供实际操控力,从而使物体具备某种行为。 问题①: 基类的程序运行过程会出现,当物体不具备初速度,并且初始朝向与速度朝向不一致的时候,物体发生奇怪轨迹(并非从正面朝向移...

Terrell21的博客 828

C#版五子棋,人工智能

用c#编写的一个简单的五子棋程序.人工智能采用贪心算法和极大极小值算法。程序中的注释很详尽

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1163

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--抵达(进入减速范围)

增加Steering的派生类 ---SteeringForArrive   抵达行为类 抵达减速范围解读图: 案例代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class SteeringForArrive : Steering { pub...

Terrell21的博客 484

DrawCall、Batches、SetPassCalls的区别和联系

一、DrawCall、Batches、SetPassCalls的基本理解 我们先从图形渲染的角度对这些概念做一个基本的理解。 1.1 DrawCall DrawCall实际上指的是一次图形渲染接口的调用,比如OpenGL的glDrawArrays或者glDrawElements的一次调用,以及DirectX的DrawPrimitive或者DrawIndexedPrimitive。因此,DrawCall可以简单理解为一次渲染指令调用。 1.2 Batches 我们知道,在调用DrawCall之前,需要设置渲染

远行's Blog 6377

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--路径跟随

增加Steering的派生类 ----SteeringForFollowPath类    路径跟随行为类 路径跟随行为类解读: 行为准备: ①记录全部路径点,统计路径点数。 ②获取下一个路径点,并获取当前是几号路径点。(用来标志是否为终点) 准备是否到达目标点的条件: ①与路径点的距离小于某个值,判断为已经到达路点  arriveDistance   sqrArriveDistanc...

Terrell21的博客 655

大数据运维面试题及答案

1. 架构组成:- 2 个 NameNode(Active 活跃节点、Standby 备用节点),实时同步元数据(通过 JournalNode 集群,默认 3 个节点,存储 edits 日志,Active 写入、Standby 读取以保持元数据一致);- 容错性强:通过 RDD 的 “ lineage(血缘)” 机制,任务失败时可快速重算,无需从头执行。:集群 “大脑”,管理元数据(文件目录、块位置),实时响应客户端请求,数据存于内存,元数据镜像(fsimage)和编辑日志(edits)持久化到磁盘;

weixin_42795092的博客 905

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--主要基类

主要基类解读: 通过移动物体类(Vehicle)中的属性:maxForce, maxSpeed,mass......等等 了解到此AI通过模拟物体所受外力来控制物体移动的速度大小以及方向。 涉及公式: acceleration = steeringForce / mass;  (a = F/m)  moveDistance =velocity *Time.fixedDeltaTIme;(...

Terrell21的博客 746

使用 Python 爬取 YouTube 视频评论(弹幕)

✅ 如何使用 Python 调用 YouTube Data API v3。✅ 如何爬取指定视频的所有评论信息。✅ 如何对评论数据进行初步分析与可视化。✅ 如何扩展功能,实现评论回复获取和多视频批量爬取。

2201_76125261的博客 643

使用手柄控制Unity及效果展示(1)

Unity支持手柄的控制,效果图如下所示:这是一篇针对手柄控制U3D入门的过程记载,主要以实现功能为目的,分四个部分进行过程展示:Input System包的下载,设备的查找,Input Actions控件的使用,主要代码的解释及编写,这里也将我使用过程中遇到的问题和解决方法也用红字进行标注,希望能帮到遇到类似问题的朋友。

Xiaotouming0的博客 7459

CentOS-7-x86_64经典版本的含义

这个版本的ISO文件包含了所有的软件包,所以文件比较大,但在安装过程中不需要下载软件包。如果你有一个稳定的网络连接,并且希望安装时能够选择最新的软件包,或者只安装特定的软件包,那么可以选择NetInstall版本。在这里,它可能是指这个ISO文件发布于2207年2月,但是这似乎是一个错误,因为截止到现在(2022年)的时间,都没有到达2207年。另外,还有一个DVD版本,这个版本的ISO文件包含了大部分常用的软件包,安装时可能需要网络连接,但比NetInstall版本少一些。

舒一笑的博客 3533

Allegro如何输出ODB文件操作指导

在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图。用Allegro如何输出ODB文件,具体操作如下。如何输出ODB文件操作指导。

weixin_54787054的博客 7202

[U3D Learning Note] Unity C# Survival Guide (1) -- Quick Tips and Assets

物体坐标/键盘鼠标Input方式/物体移动/刚体和物体撞击/暂停系统/Post-Processing Effects/爆炸效果

24/7 360

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

Unity面试题加强版之三《Unity脚本基础》

Unity面试题加强版之三Unity脚本基础 unity超全面试题,掌握轻轻松松拿Offer,码住学习 107.Unity3D中的协程(coroutine)和C#线程之间的区别是什么? 多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问 Unity3D 的对象、组件、方法。 Unity3d 没有多线程的概念,不过 unity 也给我们提供了 StartCoroutine(协同程序)和LoadLevelAsync(异步加

他在试图用代码书写这个世界,字里行间温柔尽显。勿忘初心,努力做有价值的技术文章。 3135

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

探索宇宙奥秘:Unity中的黑洞性能可视化——BlackHoleViz_v2

探索宇宙奥秘:Unity中的黑洞性能可视化——BlackHoleViz_v2 在无尽的星辰大海中,有一种存在让人类既向往又恐惧,那就是神秘莫测的黑洞。今天,我们为你揭开一扇通往宇宙深处的大门——BlackHoleViz_v2,一个使用Unity C#构建的黑洞性能可视化工具,它不仅是一个技术的展示品,更是科学家和天文爱好者手中的神奇望远镜。 项目介绍 BlackHoleViz_v2是第二代基于Un...

gitblog_00181的博客 865

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Unity 与 Android (Android Studio)的交互问题研究 (一)

Unity 与 Android (Android Studio)的交互问题研究

Yaoobs的博客 3370

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--抵达(进入减速范围)
下一篇: 【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--徘徊
Terrell21
博客等级 码龄9年 39粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值