当前位置: 首页 > news >正文

unity 2d范围检测:怪物检测范围

需求

实现怪物有一定范围的侦测能力,当目标进入侦测范围内后,自动追踪目标[使用unity navmash实现],当子弹进入时,销毁子弹,播放怪物死亡动画以及其他事件。

实现方案

实现怪物在主角靠近一定范围内时发动攻击的功能,主要涉及到游戏AI和碰撞检测方面的知识。下面我将介绍几种成熟的方案,这些方案可以根据你的具体需求和使用的游戏开发框架进行选择和调整:

1. 碰撞检测触发(Collision Detection)

  • 基础原理:在游戏世界中为怪物设置一个不可见的碰撞体(如圆形、矩形或多边形区域),当主角的碰撞体进入这个区域时,触发攻击行为。
  • 优点:简单直观,适用于大多数2D游戏。
  • 缺点:对于复杂形状的碰撞检测可能需要更高的计算成本。

2. 距离检测(Distance Checking)

  • 基础原理:通过计算怪物和主角之间的距离,当距离小于某个设定值时,触发攻击。
  • 优点:实现简单,计算成本较低。
  • 缺点:不考虑障碍物阻挡,可能导致怪物通过墙体攻击主角。

3. 视野检测(Field of View Checking)

  • 基础原理:除了检测距离,还需要检测主角是否在怪物的视野内(例如通过射线检测或扇形区域检测)。
  • 优点:更加真实,可以模拟怪物的视线被障碍物阻挡的情况。
  • 缺点:实现复杂度和计算成本较高。

4. 导航网格和路径寻找(NavMesh and Pathfinding)

  • 基础原理:利用导航网格确定游戏中可行走的区域,并使用路径寻找算法(如A*算法)计算怪物到主角的路径。如果路径存在且长度小于某个阈值,则触发攻击。
  • 优点:可以实现复杂的追踪和规避行为,适用于需要复杂AI行为的游戏。
  • 缺点:实现难度较高,对于简单游戏可能过于复杂。

5. 状态机(State Machine)

  • 基础原理:结合上述方法,使用状态机管理怪物的行为状态(如巡逻、追踪、攻击等)。当主角满足攻击触发条件时,怪物状态转换为攻击状态。
  • 优点:提高了AI行为的可控性和复杂性。
  • 缺点:需要较为复杂的逻辑设计。

选择建议

  • 对于简单的游戏,可以考虑使用碰撞检测触发或距离检测方案。
  • 如果游戏场景中存在很多障碍物,视野检测或导航网格和路径寻找将是更好的选择。
  • 为了实现更加复杂和智能的怪物行为,建议使用状态机结合上述某种或多种检测方法。

方案1和方案3优劣对比

比较碰撞检测触发(方案1)和视野检测(方案3)的优缺点可以帮助你根据游戏的具体需求和设计目标选择更合适的怪物行为触发机制。下面是两种方法的优缺点比较:

碰撞检测触发(Collision Detection)

优点:
  • 简单易实现:基于碰撞检测的逻辑相对简单,大多数游戏引擎都提供了碰撞检测的内置支持,容易实现和集成。
  • 计算效率高:相对于复杂的算法,碰撞检测通常只需要较少的计算资源,适合快速开发和运行在性能受限的平台上。
  • 直观:对于玩家来说,这种触发机制很直观。当他们看到角色进入了怪物的"领域",自然能预期到接下来可能会发生什么。
缺点:
  • 不考虑视线:碰撞检测不考虑怪物的视野和障碍物遮挡,可能导致不够真实的情况发生,例如怪物能够通过墙壁"看到"玩家并触发攻击。
  • 形状限制:如果游戏中的角色或怪物具有复杂的形状,简单的碰撞体(如圆形或矩形)可能无法精确表示实际的物理空间,需要更复杂的碰撞体设计。

视野检测(Field of View Checking)

优点:
  • 更加真实:视野检测能够模拟怪物的视线和视野范围,包括视野被障碍物阻挡的情况,这为游戏增添了更多的真实感和策略性。
  • 灵活性:可以根据需要调整视野的角度和距离,为不同的怪物设计不同的感知能力,增加游戏的多样性和复杂性。
  • 适合复杂环境:在复杂的游戏环境中(如多障碍物、复杂地形等),视野检测可以更准确地反映怪物的行为和玩家的潜行机会。
缺点:
  • 实现复杂度高:相比于简单的碰撞检测,视野检测需要更复杂的数学计算和逻辑判断,可能涉及射线投射、扇形区域检测等技术,增加了开发的难度。
  • 计算成本高:尤其是在场景中有大量动态对象和复杂地形时,视野检测可能需要较多的计算资源,对性能有一定影响。

结论

  • 如果你的游戏需要简单、直观的敌人行为触发,并且对计算资源有限制,碰撞检测触发是一个好的选择。
  • 如果游戏设计强调真实感、策略性和环境交互,尤其是在复杂的游戏环境中,视野检测提供了更多的灵活性和真实性,但需要权衡实现的复杂度和性能影响。

选择方案1实现

这里我们实现怪物检测范围为圆形,给怪物prefab挂载Circle Collider 2D,当目标进入或者在触发器内部时追逐目标,(注意把触发器 istrigger 勾选上)
给怪物同时挂上box collider 2D,当子弹和怪物主体发生碰撞时,使用回调OnCollisionEnter2D,实现子弹击中逻辑(注意不要勾选istrigger)

// 假设这是你的怪物脚本
public class Monster : MonoBehaviour
{private CircleCollider2D detectCollider;void Start(){// 初始化圆形碰撞器,并设置初试半径detectCollider = gameObject.AddComponent<CircleCollider2D>();detectCollider.radius = 1.0f; // 初始半径,可根据需求调整detectCollider.isTrigger = true; // 设置为触发器,用于检测进入碰撞区域的对象而不是进行物理碰撞}// 动态调整检测范围半径的方法public void SetDetectionRadius(float radius){if(detectCollider != null){detectCollider.radius = radius;}}
}

设置进入/待在/离开怪物的回调函数

using UnityEngine;public class Monster : MonoBehaviour
{// 当玩家角色进入触发器范围时调用void OnTriggerEnter2D(Collider2D other){if (other.CompareTag("Player")){Debug.Log("玩家进入怪物的检测范围");// 在这里添加怪物开始攻击玩家的代码}}// 当玩家角色在触发器范围内时调用void OnTriggerStay2D(Collider2D other){if (other.CompareTag("Player")){Debug.Log("玩家仍在怪物的检测范围内");// 可以添加例如持续伤害等效果的代码}}// 当玩家角色离开触发器范围时调用void OnTriggerExit2D(Collider2D other){if (other.CompareTag("Player")){Debug.Log("玩家离开怪物的检测范围");// 在这里添加怪物停止攻击的代码}}
}

相关文章:

unity 2d范围检测:怪物检测范围

需求 实现怪物有一定范围的侦测能力&#xff0c;当目标进入侦测范围内后&#xff0c;自动追踪目标[使用unity navmash实现]&#xff0c;当子弹进入时&#xff0c;销毁子弹&#xff0c;播放怪物死亡动画以及其他事件。 实现方案 实现怪物在主角靠近一定范围内时发动攻击的功能…...

外包干了10天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…...

后端常问面经之Java基础

基本数据类型 Java中有8种基本数据类型&#xff1a; 6种数字类型&#xff1a; 4种整数型&#xff1a;byte、short、int、long 2种浮点型&#xff1a;float、double 1种字符类型&#xff1a;char 1种布尔类型&#xff1a;boolean 数据类型的默认值以及所占空间如下&#x…...

I.MX6ULL_Linux_驱动篇(58)linux IIO驱动

工业场合里面也有大量的模拟量和数字量之间的转换&#xff0c;也就是我们常说的 ADC 和 DAC。而且随着手机、物联网、工业物联网和可穿戴设备的爆发&#xff0c;传感器的需求只持续增强。比如手机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等&#xff0c;这些传…...

两个包装类型变量的比较问题

问题&#xff1a; 由于受包装类的自动装箱和拆箱的影响&#xff0c;一直以为直接用直接比较两个包装类的大小是否相等就可以&#xff0c;惭愧。比如&#xff1a; Integer a11; Integer b11; System.out.println(ab); 运行结果是 true&#xff0c;似乎没啥问题&#xff0c;但…...

Qt/C++通用跨平台Onvif工具/支持海康大华宇视华为天地伟业等/云台控制/预置位管理/工程调试利器

一、前言 在安防视频监控行业&#xff0c;Onvif作为国际标准&#xff0c;几乎主要的厂商都支持&#xff0c;不仅包含了国内的厂商&#xff0c;也包括主要的国际厂商&#xff0c;由于有了这个标准的存在&#xff0c;使得不同设备不同安防平台之间&#xff0c;能够接入各个厂家的…...

js 在for循环中有setTimeout 时,不执行等待,解决方法

原因&#xff1a;由于setTimeout是异步的&#xff0c;for循环是同步的&#xff0c;所以你的循环会立即继续到下一个迭代&#xff0c;而不会等待setTimeout完成。这意味着所有setTimeout调用几乎会同时开始等待2秒&#xff0c;而不是一个接一个地等待&#xff0c;因此程序出错。…...

机械硬盘与固态硬盘的区别

硬盘中包含机械硬盘、固态硬盘和混合硬盘&#xff0c;那机械硬盘与固态硬盘之间有什么区别呢&#xff1f; 机械硬盘就是传统的普通硬盘&#xff0c;主要采取的存储方式是机械式存储&#xff0c;通过磁头在盘片上进行读写数据&#xff1b;固态硬盘采取的方式则是电子存储&#x…...

Springboot总结

新建项目后&#xff0c;我们一般都需要配置编码&#xff0c;这点非常重要&#xff0c;很多初学者都会忘记这一步&#xff0c;所以要养成良好的习惯。 IDEA 中&#xff0c;仍然是打开File->settings&#xff0c;搜索 encoding&#xff0c;配置一下本地的编码信息。如下&…...

P8623 [蓝桥杯 2015 省 B] 移动距离 Python

[蓝桥杯 2015 省 B] 移动距离 题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为 $1,2,3, \cdots $ 。 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为 6 6 6 时&#xff0c;开始情形如…...

【Python】学习率调整策略详解和示例

学习率调整得当将有助于算法快速收敛和获取全局最优&#xff0c;以获得更好的性能。本文对学习率调度器进行示例介绍。 学习率调整的意义基础示例无学习率调整方法学习率调整方法一多因子调度器余弦调度器 结论 学习率调整的意义 首先&#xff0c;学习率的大小很重要。如果它…...

【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;用户密码存放地及方式2.2 &#x1f514;使用…...

UE5学习日记——蓝图节点前缀关键字整理

一、起因 节点如海&#xff0c;中英文翻译的时候还是有差别的&#xff0c;比如&#xff1a; 同一个中文&#xff0c;可能在英文里完全不同&#xff0c;连出现位置可能都不一样 附加 Attach Actor To Component&#xff08;将Actor附加到组件&#xff09;Append Array&#xf…...

浅析机器学习的常用方法

引言&#xff1a; 机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;是一种以计算机程序为基础&#xff0c;在不需要明确编程的情况下&#xff0c;对数据进行分析和处理的人工智能技术。与传统的计算机编程相比&#xff0c;机器学习的区别在于它通过数据建立模…...

大数据开发(日志离线分析项目)

大数据开发&#xff08;日志离线分析项目&#xff09; 一、项目需求1、使用jqueryecharts的方式调用程序后台提供的rest api接口&#xff0c;获取json数据&#xff0c;然后通过jquerycss的方式进行数据展示。工作流程如下&#xff1a;2、七大角度1、用户基本信息分析模块2、浏览…...

PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第48讲&#…...

【若依 SpringBoot 前后端分离版】修改加密传输后密码错误的解决方法(附排错过程)

目录 排错过程 报错信息 SysLoginController SysLoginService&#xff08;问题核心&#xff09; 太长不看版&#xff1a;解决方法 文章传送门&#xff1a;若依(RuoYi)SpringBoot框架密码加密传输(前后分离板)_若依密码加密方式-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞…...

发送请求- header配置

请求头里是客户端的要求&#xff0c;把你的诉求告诉服务端&#xff0c;服务端按照你的要求返回数据 &#xff0c; 请求header需要严格全配置&#xff0c;把请求header全部传入&#xff0c;不能频繁访问&#xff0c;让后端知道它是正常请求 一般只配置User-Agent和Content Typ…...

C语言重难知识点

C语言重难知识点 if(a=1) 为真函数指针的调用(int)2.9 = 2逗号运算符,最右边表达式值作为整个逗号表达式的值。文件操作if(a=1) 为真 int a=0,b=0,c=0; if(a...

jMeter学习

一. JMeter介绍 1. 什么是JMeter&#xff1f; Apache JMeter™ 应用程序是开源软件&#xff0c;一个 100% 纯 Java 应用程序&#xff0c;旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的&#xff0c;但后来扩展到其他测试功能。 2. JMeter能做啥&#x…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...