Unity AI角色行为编程入门:从基础类到复杂行为
创作时间:
作者:
@小白创作中心
Unity AI角色行为编程入门:从基础类到复杂行为
引用
CSDN
等
10
来源
1.
https://blog.csdn.net/dmk17771552304/article/details/113951925
2.
https://blog.csdn.net/m0_63024355/article/details/133869254
3.
https://blog.csdn.net/qq_43293994/article/details/112761256
4.
https://blog.csdn.net/dmk17771552304/article/details/113951925#t2
5.
https://blog.csdn.net/dmk17771552304/article/details/113951925#t1
6.
https://blog.csdn.net/qq_41727685/article/details/124419820
7.
https://docs.unity3d.com/cn/2019.3/Manual/com.unity.modules.vehicles.html
8.
https://docs.unity3d.com/cn/2021.1/Manual/com.unity.modules.vehicles.html
9.
https://cloud.tencent.com/developer/article/1636853
10.
https://www.lfzxb.top/context-steering-behavior-driven-steering-at-the-macro-scale/
在游戏开发中,AI角色的行为是提升游戏沉浸感和可玩性的重要因素。而实现这些行为的核心技术,就是AI角色行为编程。本文将带你从零开始,学习如何在Unity中通过Vehicle类、AILocomotion类和Steering类来实现AI角色的自主移动。
01
基础概念
在Unity AI角色行为编程中,有三个核心类:Vehicle类、AILocomotion类和Steering类。它们共同构成了AI角色移动的基础框架。
- Vehicle类:将AI角色抽象为一个质点,包含位置、速度、质量等信息。
- AILocomotion类:继承自Vehicle类,负责控制AI角色的实际移动。
- Steering类:实现各种具体的行为,如追逐、逃避、徘徊等。
02
Vehicle类详解
Vehicle类是AI角色行为编程的基础。它将AI角色抽象为一个质点,包含以下关键属性:
- 位置(position):角色在游戏世界中的当前位置。
- 速度(velocity):角色的当前移动速度。
- 质量(mass):角色的质量,影响加速度。
- 最大速度(max_speed):角色能达到的最大速度。
- 最大力(max_force):能施加到角色身上的最大力。
- 朝向(orientation):角色的朝向信息。
Vehicle类的位置计算逻辑如下:
- 确定每一帧的操控力(不超过max_force)
- 除以质量得到加速度
- 将加速度与原速度相加(不超过max_speed)
- 根据速度和时间计算位置变化
- 与原位置相加得到新位置
以下是Vehicle类的代码实现:
using UnityEngine;
namespace AI
{
public class Vehicle : MonoBehaviour
{
private Steering[] _steerings;
public float MaxSpeed = 10;
public float MaxForce = 100;
protected float _sqrMaxSpeed;
public float Mass = 1;
public Vector3 Velocity;
public float Damping = 0.9f;
public float ComputeInterval = 0.2f;
public bool IsPlannar = true;
private Vector3 _steeringForce;
protected Vector3 _acceleration;
private float _timer;
protected void OnStart()
{
_steeringForce = Vector3.zero;
_sqrMaxSpeed = MaxSpeed * MaxSpeed;
_timer = 0;
_steerings = GetComponents<Steering>();
}
private void Update()
{
_timer += Time.deltaTime;
_steeringForce = Vector3.zero;
if (_timer > ComputeInterval)
{
foreach (Steering s in _steerings)
{
if (s.enabled)
_steeringForce += s.Force() * s.weight;
}
_steeringForce = Vector3.ClampMagnitude(_steeringForce, MaxForce);
_acceleration = _steeringForce / Mass;
_timer = 0;
}
}
}
}
03
AILocomotion类详解
AILocomotion类继承自Vehicle类,负责实现AI角色的实际移动。它包含了CharacterController和Rigidbody组件,用于处理物理交互和动画播放。
以下是AILocomotion类的关键代码:
using UnityEngine;
public class AILocomotion : Vehicle
{
private CharacterController controller;
private Rigidbody theRigidbody;
private Vector3 moveDistance;
void Start()
{
controller = GetComponent<CharacterController>();
theRigidbody = GetComponent<Rigidbody>();
moveDistance = new Vector3(0, 0, 0);
base.Start();
}
void FixedUpdate()
{
velocity += acceleration * Time.fixedDeltaTime;
if (velocity.sqrMagnitude > sqrMaxSpeed)
velocity = velocity.normalized * maxSpeed;
moveDistance = velocity * Time.fixedDeltaTime;
if (isPlanar)
{
velocity.y = 0;
moveDistance.y = 0;
}
controller.Move(moveDistance);
theRigidbody.MovePosition(transform.position + moveDistance);
}
}
04
Steering类应用
Steering类用于实现具体的操控行为。例如,追逐行为(Pursuit)和逃避行为(Evade)可以通过以下方式实现:
public class Pursuit : Steering
{
public Transform target;
public float predictionTime = 1.0f;
public override Vector3 Force()
{
Vector3 targetPos = target.position + target.velocity * predictionTime;
return targetPos - transform.position;
}
}
public class Evade : Steering
{
public Transform target;
public float predictionTime = 1.0f;
public override Vector3 Force()
{
Vector3 targetPos = target.position + target.velocity * predictionTime;
return transform.position - targetPos;
}
}
05
实例应用:追逐行为
让我们通过一个简单的追逐行为示例,展示如何组合使用这些类:
- 创建一个AI角色和一个目标对象
- 为AI角色添加AILocomotion组件
- 为AI角色添加Pursuit组件,并设置目标对象
- 运行场景,观察AI角色追逐目标的行为
通过这个示例,你可以看到Vehicle类、AILocomotion类和Steering类如何协同工作,实现复杂的AI角色行为。
06
总结与展望
通过本文的学习,你已经掌握了Unity AI角色行为编程的基础知识。从Vehicle类的抽象,到AILocomotion类的移动控制,再到Steering类的具体行为实现,这些核心概念和代码示例将帮助你开发出更智能、更真实的AI角色。
未来,你可以进一步探索群体行为、路径规划等高级AI技术,为你的游戏世界增添更多生动的AI角色。
热门推荐
股指期权的权利金如何计算?这种计算方式对投资决策有何影响?
网络流行语CPDD究竟代表什么含义?
谈恋爱脱单的有效办法
激情过后,婚姻一地鸡毛,这部剧太真实了
五分钟燃脂运动低强度(5分钟锻炼)
电脑上截屏按什么键?电脑截屏的快捷方式有4种,用过的不超过1%
软膜天花:现代室内设计的绝佳选择与实际应用案例展示
中保研最新结果发布:问界M9四项全优领跑,新能源车型安全性提高
重启手机有什么作用?你需要知道的一切
快船5连胜背后的转折:泰伦卢缺阵,肖教练激活全队
九江深度游:探寻诗情画意的山水之旅
世界首创研究证实:走路能缓解腰痛!专家详解正确姿势和具体方法
知名巧克力重金属超标,营养专家给出安全购买建议
公务员考试满分备考:150分的突破与行测提高策略
钓鱼技巧:子线长短、钩间距怎么选?这篇文章总结全了
行星防御岗究竟是什么样岗位?天文科普学会解答
肿瘤预防要趁早健康之路
南极洲新发现30处关键保护区,为全球生物多样性保护提供重要参考
文化传承探访行①丨惠安崇武古城保护活化利用 奏响文化传承新乐章
Excel表格记录物料进出的全面指南
腿上出现白色脓包且周围发红肿大,该如何处理
英雄辉光讲解,如何轻松快速上手
INTJ职业兴趣:职业选择与发展指南
丝袜的历史与文化探究
DNF玩家必看:锻造与强化,哪个才是提升战力的最佳选择?
暗河大家长苏昌河的终极目标与结局
日资百货在中国:喜忧参半的本地化与转型探索之路
家暴背后的心理:探究家暴男的行为动机与心理状态
独角兽高达出自哪个高达系列?
怎么优化CNN模型以提高准确率?