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

【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle 如果该障碍物是可移动的障碍物,可以使用 Nav Mesh Obstacle 组件,实现物体的动态碰撞。比如一些动态机关或可移动的墙壁等。动态障碍物通过 Carve 设置也可以实现动态烘焙挖孔,但性能损耗较大,通常情况下尽量不要使用该功能。 阅读详情

以上一篇文章基类为基础,增加Steering的派生类

----SteeringForSeek类   靠近行为类。

----SteeringForFlee类  逃跑行为类。

靠近行为解读:

 靠近行为类就是为问题提供实际操控力,从而使物体具备某种行为。

 

问题①:

基类的程序运行过程会出现,当物体不具备初速度,并且初始朝向与速度朝向不一致的时候,物体发生奇怪轨迹(并非从正面朝向移动到目标位置)。

void Start () {
        velocity = transform.forward;//初速度为开始时候的朝向
        controller = GetComponent<CharacterController>();
        theRigidbody = GetComponent<Rigidbody>();
        moveDistance = new Vector3(0, 0, 0);
        base.Start();
	}

解决:可以从AILocomotion类中的start 为velocity添加一个初始值为当前物体朝向。(此方法只作临时解决问题使用)

           

问题②:

解决:注意这里的 Skin Width 宽度过大,会把物体太高,使得两物体不在同一水平线上,而导致出现奇怪的运动轨迹。

 

逃跑行为解读:

 

 

靠近行为类代码实现:(通过计算作用力来控制物体移动的操控力)

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

public class SteeringForSeek : Steering {
    //寻找的目标
    public GameObject target;
    //预期速度
    private Vector3 desiredVelocity;
    //获取被操控的AI角色,以便查询这个AI角色的最大速度信息;
    private Vehicle m_vehicle;
    //最大速度
    private float maxSpeed;
    //是否在二维平面上
    private bool isPlanar;

	// Use this for initialization
	void Start () {
        //获取组件以及读取数据
        m_vehicle = GetComponent<Vehicle>();
        maxSpeed = m_vehicle.maxSpeed;
        isPlanar = m_vehicle.isPlanar;

	}

    public override Vector3 Force()
    {
        //通过两个位置求出物体到目标的向量
        desiredVelocity = (target.transform.position - transform.position).normalized * maxSpeed;
        if (isPlanar)
            desiredVelocity.y = 0;
        //通过向量相减,得出驱使物体达到目标的操控力
        return (desiredVelocity - m_vehicle.velocity);
       
    }
}

逃跑行为类代码:

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

public class SteeringForFlee : Steering {
    public GameObject target;   //远离目标
    public Vector3 desiredVelocity; //期望速度
    public Vehicle m_vehicle;   //操控力作用的物体
    public float maxSpeed;      //作用最大速度
    public float fearDistance = 20; //逃跑距离

    private void Start()
    {
        m_vehicle = GetComponent<Vehicle>();
        maxSpeed = m_vehicle.maxSpeed;
    }

    public override Vector3 Force()
    {
        Vector3 tmpPos = new Vector3(transform.position.x, 0, transform.position.z);
        Vector3 tmpTargetPos = new Vector3(target.transform.position.x, 0, target.transform.position.z);
        //如果AI与目标距离大于逃跑距离,那么返回0向量
        if (Vector3.Distance(tmpPos, tmpTargetPos) > fearDistance)
            return new Vector3(0, 0, 0);
        //如果小于逃跑距离,那么计算逃跑的操控力
        desiredVelocity = (transform.position - target.transform.position).normalized * maxSpeed;
        return (desiredVelocity - m_vehicle.velocity);
    }


}

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

Unity中的velocity简单示例 Unity中的Velocity(速度)通常用于控制物体的运动。以下是一个简单的示例,展示了如何在Unity中使用Velocity来控制一个游戏对象(如角色或摄像机)的移动。,并将其附加到要控制的物体上。首先,我们需要创建一个C#脚本,例如。 阅读详情

相关推荐

C# 在人工智能领域的优势与实践案例分析

尽管 Python 以其庞大的机器学习生态系统成为 AI 开发的首选语言,但 C# 作为一门强类型、面向对象的编程语言,凭借其在企业级应用开发中的广泛应用,逐渐展现出在人工智能领域的独特优势。C# 在人工智能领域的优势不仅体现在其强大的性能和开发工具链上,还在于它能够与多种流行的机器学习框架和工具进行深度集成。C# 的优势在于其广泛的企业应用场景、优异的性能和良好的开发生态。如果你是一名 C# 开发者,并希望在人工智能项目中发挥所长,那么掌握 C# 在 AI 中的应用将为你打开新的发展机遇。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1788

Unity Steering

Unity相关的Steering技术: https://github.com/antonpantev/unity-movement-aihttps://github.com/ricardojmendez/UnitySteer/tree/v3.0.0

stalendp的专栏 908

C#版五子棋,人工智能

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

unity3d人工智能学习(1)——操控行为的实现(靠近)

这里写自定义目录标题如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。...

weixin_44292962的博客 1361

Artificial Intelligence For Games第三章SteeringBehavior Unity3d实现

Artificial Intelligence For Games第二版第三章SteeringBehavior部分unity3d实现代码,unity3d版本5.6.0f3

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程。从运动学建模入手,对比了基于距离与基于位置偏差的两种控制策略,并重点阐述了高精度轨迹跟踪的控制器设计、Simulink仿真搭建及PID参数整定方法,为移动机器人运动控制提供了完整的仿真实践指南。

weixin_29169505的博客 312

Unity核心10——导航寻路系统

Unity 中的导航寻路系统是能够让我们在游戏世界当中,让角色能够从一个起点准确的到达另一个终点,并且能够自动避开两个点之间的障碍物选择最近最合理的路径进行前往​中的导航寻路系统的本质,就是在 A 星寻路算法的基础上进行了拓展和优化导航网格(NavMesh)的生成——要想角色能够在场景中自动寻路产生行进路径,那么必须得先有场景地形数据,导航网格生成就是生成用于寻路的地形数据导航网格寻路组件(NavMesh Agent)——寻路组件就是帮助我们根据地形数据计算路径让角色动起来的关键。

weixin_53163894的博客 5908

SIwave仿真手册——信号完整性仿真之S参数的提取(二)

上一篇简单了讲述了软件的各个操作界面,本次博客更新关于的仿真,因为第二章完整的内容比较多,所以分成好几篇博客进行分享。

luohuo9844的博客 1万+

Unity初学

对于unity基本学习

qq_54350870的博客 347

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

DaVinci Developer中枚举类型变量的创建与实战应用

本文详细介绍了在DaVinci Developer中创建和使用枚举类型变量的方法与实战应用。通过智能温控系统的案例,阐述了枚举类型在嵌入式开发中的核心价值,包括提升代码可读性、类型安全性和维护便捷性。文章还提供了枚举类型在状态机实现和多模块协同中的高级应用技巧,以及调试与优化的实用建议。

ik678901234的博客 511

【亲测免费】 探索UnitySteer:一个高效的游戏AI行为库

是一个开源项目,由Ricardo JMendez开发,它为Unity游戏引擎提供了一系列预先构建的游戏AI行为模块。该项目的目标是让开发者能够轻松地在自己的游戏中实现复杂的群体智能和个体角色的行为模拟。 ## **项目简介** UnitySteer是一系列基于组件的脚本,其中包括了各种模拟真实世界行为的算法,如路径跟随、避障、群集行为等。这些脚本可以被轻松集成到任何Unity项目中,无需深入理...

gitblog_00081的博客 783

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5335

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

增加Steering的派生类 ----SteeringForPursuit类    追逐行为类 追逐行为解读图: 本案例的条件判断,通过判断 ①物体朝向与目标朝向夹角的角度 ----------图中红色角度 ②物体朝向与物体到目标当前位置向量所成的角度  ----------图中蓝色角度       来让物体做出两种追逐行为: ①物体按靠近行为的方式追逐目标 ②物体按预测目标移...

Terrell21的博客 1117

Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测的详细项目实例

这些数据包含了随时间变化她动态信息,具有显著她趋势她、周期她和季节她特征。该模型她核心优势在她其能够自适应地学习数据中她多层次时序信息,捕捉时间序列中她长短期依赖关系,从而提高预测她准确她和可靠她。本项目旨在实她一个基她PTO-TCN-LTTM-TFSttfntion她多变量时间序列预测模型,通过粒子群优化算法优化时间卷积长短期记忆神经网络,并融合注意力机制,提高模型她预测精度和稳定她。本项目模型她实她分为多个阶段,首先她数据预处理,接着她PTO优化,然后她TCN和LTTM网络她构建她训练。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1079

Godot 4.x 实现 JRPG 回合制战斗系统:架构、状态机与实战优化

游戏开发中,状态机是管理复杂逻辑流转的核心设计模式,尤其在回合制战斗这类事件驱动的场景中。其原理是通过定义有限的状态和明确的转移条件,来控制系统在不同阶段的行为,从而实现清晰、可维护的流程控制。这项技术的价值在于能够将杂乱的条件判断代码结构化,降低模块间的耦合度,提升代码的可读性和可扩展性。在游戏开发领域,状态机广泛应用于角色AI、UI流程、战斗系统等场景。本文以Godot引擎为例,深入探讨如何运用节点与信号驱动架构,构建一个健壮的JRPG(日式角色扮演游戏)回合制战斗系统。内容涵盖从核心的**状态机**设

weixin_33749242的博客 499

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

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

Terrell21的博客 655

qtcreator使用远程服务器编译代码

我并没有找到很好的windows上可以用的rsync工具,最后是装了wsl来调用rsync同步到代码后,在用ssh调用linux命令来编译的。安装wsl安装ubuntu启动wsl然后把windows里的ssh文件证书和配置复制到wsl里同时config的key目录需要改一下,这样就可以登录服务器了然后在home目录创建build.sh进行远程编译。

习惯就好zz的专栏 1380

UnityAI——操控行为编程的主要基类

本文内容位于AI模型中的运动层。变成种主要涉及到Vehicle、AILocomotion和Steering类,它们是实现操控行为的基础。

m0_63024355的博客 648

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

U3D粒子系统

粒子系统 可以对任何物体,添加粒子组件。 1)老粒子 粒子由发射器,运动器,渲染器组成。 当设置粒子的velocity时候,设置x,z值可以得到风吹走的效果。 simulate in world space在是世界坐标系中更新粒子,关闭后可以跟随物体运动,技能特效效果需要该设置。 粒子性能比较消耗性能,要尽量使用少量,少层的粒子达到效果,且粒子要及时关闭和销毁。 老式的粒子动画器勾选

自由理想的足迹 1450

假人有限元模型

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

Unity-八(导航和寻路)

导航和寻路导航网格 导航网格 首先在Unity中创建一个简单的场景。 将Sphere添加Nav Mesh Agent组件,在Windows中找到AI添加Navigation(导航) ,在Inspector视图边会出现Navigation。 选中所有的静态物体勾选Navigation Static 在Bake界面中点击Bake按钮。 ...

AD_GOD的博客 4818

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unity:addForce和velocity的区别

Rigidbody.velocity 瞬间给物体一个恒定的速度,将物体提升至该速度 Rigidbody.addForce 瞬间给物体一个规定好的力, 假设我们想要做一个2D的跳跃游戏,在这个游戏里我希望我按下跳跃键的时候,游戏物体的跳跃高度是恒定的。那么,如果此时我使用的是addForce显然不会满足我的效果,因为经过测试,每按一下跳跃键,它会被施加一个恒定的力,它跳跃的初始速度会越变越大,每次跳跃的高度和前一次相较变得越来越大(在连续跳跃的情况下),也就是可以理解成,我现在被施加了一个大小为50的力,在重

m0_53438035的博客 4548

自动行为操控(Steering)(一)—框架

自动操控架构图 操控框架类职责 Steering类 public abstract class Steering : MonoBehaviour { //速度 public float speed; //目标 public Transform target; //运动体 [HideInInspector] pub

uokeyo的博客 1915

Unity3D 中物体向目标移动

这几天在写一个数字漫游项目,有一个要求是在高空鸟瞰,沿着固定的路径移动.........     部分代码如下:C#代码,CameraMove.cs using UnityEngine; using System.Collections; public class CameraMove : MonoBehaviour { int SpeedUp = 10; bool Au

抄经书的程序猿 1万+

FixedUpdate真的是固定的时间间隔执行吗?聊聊游戏定时器

0x00 前言 有时候即便是官方的文档手册也会让人产生误解,比如本文将要讨论的Unity引擎中的FixedUpdate方法。 This function is called every fixed framerate frame, if the MonoBehaviour is enabled. 而大家似乎也都认为FixedUpdate是在固定的时间间隔执行,不受游戏帧率的影响。其实这么说并...

weixin_34128411的博客 1192

C#开发学习人工智能的第一步

前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库。 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的。 做不了人工智能的不是C#这种语言,而是你,我这种普通的程序员。 做人工智能需要一定的学历背景,一定的数学基础和公司专项的资源供给;而这种机缘小之又小,你我既然是普通的程序员,就必然与此无缘。 但在人工智能如日中天...

weixin_30533797的博客 901
上一篇: 【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、付费专栏及课程。

余额充值