【第017问 Unity Physics.OverlapSphere如何检测附近玩家?】

一、背景

如何检测一个对象范围内的玩家,这个可以直接使用距离判定,物体射线检测等相关方式;这里采用Physics.OverlapSphere的方式来实践其过程,并对Physics.OverlapSphere的使用做一下记录;

二、Physics.OverlapSphere

1、该API表示采用球体的方式进行物体的范围检测;那什么是球体,看下面的动画:请添加图片描述
上图就是Unity中创建的一个Sphere;想篮球、乒乓球也是这种形状;那么我们需要检测范围区域就是这种球形;

2、该球形检测的API有两个:
2.1 Physics.OverlapSphere(Vector3 position, float radius, int layerMask)
2.2 Physics.OverlapSphere(Vector3 position, float radius)

这两个API的区别就在于layerMask;如果你指定了layerMask,那么检测的对象就只针对指定的LayerMask,否则就是所有的碰撞体都会检测;

对该API进行详细说明:
position:表示需要指定的检测的位置,如下动画:请添加图片描述
上面移动的的位置就是该对象需要检测的起始位置,也就是这个球体的球心;整个检测的起始点位置;

radius: 表示该球心的半径,看动画:
请添加图片描述
可以看到上面的颜色部分,只是绘制除了一个平面的部分半径可视化的直线;当在进行检测的时候和半径的大小相关联;半径内的可以检测到,半径以外的不可以检测

layerMask: 可以设置,也可以不设置,如果设置那么就用方式:LayerMask.GetMask(“BoxCollider”); 进行设置;如果不进行设置就检测所有的Layer;这里的BoxCollider是自定义的Layer名字;

三、实践效果

1、检测LayerMask为BoxCollider的物体是否在球体范围内;半径可以调节:动画演示:请添加图片描述
默认白色的Cube表示没有被检测到,颜色变为红色的Cube表示在Sphere的范围内;
在上面的动画中:左右两个Cube的Layer为BoxCollider;上下两个Cube的layer为Default;

1.1 、可以看到在半径以外是不会被检测到的,也就是Cube不会变红的;
1.2、即使在半径范围内,如果和需要检测的LayerMask不一样,那么Cube也是不会变红的;

2、检测所有,不区分LayerMask 动画演示:
请添加图片描述
该动画就是不区分LayerMask,所有可以碰撞的物体都会被检测,如果在半径范围内,那么就会被检测到;

注意
既然是物体碰撞检测,那么被检测的对象一定要有Collider,要不然是不会被检测到的;以上就是通过可视化事件范围内NpC的检测;

四、源码

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

[ExecuteAlways]
public class PhysicsSphereTest : MonoBehaviour
{
    private SphereCollider _sphereCollider;
    [SerializeField] private Material _material;
    [SerializeField] private Material defaultMaterial;


    [SerializeField] private List<MeshRenderer> _meshRenderers;

    private void Awake()
    {
        _sphereCollider = GetComponent<SphereCollider>();
    }

    // Start is called before the first frame update
    void Start()
    {
    }


    private void OnDrawGizmos()
    {
        if (_sphereCollider == null)
            _sphereCollider = GetComponent<SphereCollider>();
        float radius = _sphereCollider.radius;

        for (int angel = 0; angel < 360; angel += 2)
        {
            double x = Math.Cos(angel * 1.0f);
            double z = Math.Sin(angel * 1.0f);
            Vector3 v3 = Vector3.one;
            v3.y = 0;
            v3.x = (float) x * radius;
            v3.z = (float) z * radius;
            Vector3 target = transform.position + v3;
            Debug.DrawLine(transform.position, target, Color.magenta);
        }

        ResetMaterial();
        int layer = LayerMask.GetMask("BoxCollider");
        // Collider[] colliders = Physics.OverlapSphere(transform.position, radius, layer);
        Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
        foreach (var boid in colliders)
        {
            boid.GetComponent<MeshRenderer>().material = _material;
        }
    }


    void ResetMaterial()
    {
        foreach (var mr in _meshRenderers)
        {
            mr.material = defaultMaterial;
        }
    }
}

五、结语

外面下雨,但屋里有点热[valaki]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFMPEG将视频切片成ts文件并对ts文件进行ASE加密,并合并成M3U8操作方法

环境&#xff1a;centos7 开发语言&#xff1a;php 框架&#xff1a;视频转码服务系统 生成ASE加密文件需要用到的命令&#xff1a; #!/bin/sh BASE_URL${1:-.} openssl rand 16 > file.key echo $BASE_URL/file.key > file.keyinfo echo file.key >> file.key…

Unity --- Transform类

1.一个很有意思的事实是Transform类不仅用来管理游戏物体的位置缩放旋转&#xff0c;还用来管理游戏物体的父物体与子物体之间的关系 当游戏物体A的trasnform类a是游戏物体B的transform类b的父类的话&#xff0c;游戏物体A就是游戏物体B的父物体 2.如何访问脚本当前挂载的游戏…

Unity IL2CPP 游戏分析入门

一、目标 很多时候App加密本身并不难&#xff0c;难得是他用了一套新玩意&#xff0c;天生自带加密光环。例如PC时代的VB&#xff0c;直接ida的话&#xff0c;汇编代码能把你看懵。 但是要是搞明白了他的玩法&#xff0c;VB Decompiler一上&#xff0c;那妥妥的就是源码。 U…

GPT-4创造者:第二次改变AI浪潮的方向

OneFlow编译 翻译&#xff5c;贾川、杨婷、徐佳渝 编辑&#xff5c;王金许 一朝成名天下知。ChatGPT/GPT-4相关的新闻接二连三刷屏朋友圈&#xff0c;如今&#xff0c;这些模型背后的公司OpenAI的知名度不亚于任何科技巨头。 不过&#xff0c;就在ChatGPT问世前&#xff0c;Ope…

昇腾AI机器人发布,12家企业、5家高校签约,昇腾AI开发者创享日全国巡展沈阳首站成功举办

“创未来&#xff0c;享非凡”昇腾AI开发者创享日2023年全国巡回首站活动成功举办&#xff0c;本次活动由辽宁省科技厅指导&#xff0c;由沈阳市科技局、浑南区人民政府、沈阳高新区管理委员会、华为技术有限公司共同主办&#xff0c;沈阳昇腾人工智能生态创新中心承办&#xf…

使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法

使用enrichKEGG做通路富集分析时&#xff0c;一直报错&#xff1a;显示No gene can be mapped....k <- enrichKEGG(gene gene, organism "hsa", pvalueCutoff 1, qvalueCutoff 1)但是之前用同样的基因做分析是能够成功地富集到通路&#xff0c;即便是网上的数据…

Postman下载与安装操作步骤【超详细】

&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是超梦梦梦梦&#xff0c;很高兴认识大家~&#x1f357;关注➕点赞➕评论➕收藏 &#x1f604;&#x1f64f;博主水平有限&#xff0c;如有错误&#xff0c;欢迎各位大佬纠正 Postman下载与安装&#x1…

STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建

事物的难度远远低于对事物的恐惧 完成对STM32单片机和ESP8266 WiFi模块的配置之后&#xff0c;接下来需要完成Android APP代码的编写以及实现。 1.添加网络权限 因为我们需要对WiFi进行操作&#xff0c;所以需要网络的权限&#xff0c;在AndroiManifest.xml文件中加入以下代码…

Liunx创建用户与授权大招以及Linux修改SSH端口

1、Liunx创建用户与授权 背景&#xff1a;大家个人建站学习的时候&#xff0c;经常会涉及到创建Linux用户&#xff0c;授权用户&#xff0c;网上一堆操作各种不好使&#xff0c;小编总结了一个最好用的写法供大家使用。 还有个人云服务遭受挖矿攻击的情况&#xff0c;建议大家也…

mac maven安装和配置本地仓库

首先我们需要下载&#xff1a;maven官网下载地址传送门 x.x.x-bin.zip(Windows系统的) 找到x.x.x-bin.tar.zip(mac系统的) 备注&#xff1a;下面的图截错了&#xff0c;抱歉 下载完成之后&#xff0c;可以在右下角的下载找到 然后双击这个 .zip 压缩包 &#xff0c;可以进行…

解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

起因 为了互通Linux系统和Windows系统的文件&#xff0c;以更好的实现文件管理和资源共享。 所以在查阅资料后&#xff0c;使用WinScp&#xff0c;WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。它的主要功能就是在本地与远程计算机间安全的复制文件。winscp也可…

Python的23种设计模式(完整版带源码实例)

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; Python的23种设计模式 一 什么是设计模式 设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验&…

猿创征文 | re:Invent 朝圣之路:“云“行业风向标

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; AWS 亚马逊云科技re:Invent全球大会 2022年亚马逊云科技re:Invent全球大会震撼来袭&#xff0c;即将于北京时间11月30日-12月2日在美国内华达州&#xff0c;拉斯维加斯…

【七】一文带你迅速掌握设计模式中的单例模式

1. 什么是设计模式 设计模式可以理解为就是一种固定套路&#xff0c;就好比你和对手下棋得时候&#xff0c;会有一些固定套路下法&#xff1b;而设计模式就是软件开发的棋谱~ 设计模式有很多种&#xff0c;接下来就介绍一种校招阶段&#xff0c;主要考察的两种设计模式: 单例…

centos 7安装mysql

今天在centos 7上安装mysql数据库&#xff0c;遇到了些问题以及解决方法&#xff0c;记录一下。1、下载mysql安装包wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm出现跟上面界面这样子&#xff0c;说明是ok的了&#xff0c;接下来&#xf…

LAMP架构之zabbix监控(2):zabbix基础操作

目录 一、zabbix监控节点添加和删除 &#xff08;1&#xff09;手动添加 &#xff08;2&#xff09;自动添加 &#xff08;3&#xff09;按照条件批量添加 &#xff08;4&#xff09;使用api工具进行管理 二、针对应用的zabbix监控 一、zabbix监控节点添加和删除 实验说明&a…

yolov5 优化系列(三):修改损失函数

1.使用 Focal loss 在util/loss.py中&#xff0c;computeloss类用于计算损失函数 # Focal lossg h[fl_gamma] # focal loss gammaif g > 0:BCEcls, BCEobj FocalLoss(BCEcls, g), FocalLoss(BCEobj, g)其中这一段就是开启Focal loss的关键&#xff01;&#xff01;&…

基于opencv的边缘检测方法

1、梯度运算 用OpenCV的形态变换&#xff08; 膨胀、腐蚀、开运算和闭运算&#xff09;函数morphologyEx 梯度运算即膨胀结果-腐蚀结果&#xff1a; 【注意】对于二值图像来说&#xff0c;必须是前景图像为白色&#xff0c;背景为黑色&#xff0c;否则需要进行反二值化处理 …

axios介绍和使用

简介 本文主要讲解axios的概念和基本使用。 axios时目前最流行的ajax封装库之一&#xff0c;用于很方便地实现ajax请求的发送。 支持的功能&#xff1a; 从浏览器发出 XMLHttpRequests请求。从 node.js 发出 http 请求。支持 Promise API。能拦截请求和响应。能转换请求和响…

中文文献怎么查找,带你了解中文文献查找途径及方法

在我们撰写论文和科研工作时经常会查找文献资料&#xff0c;今天带大家了解中文文献查找途径及方法。 查找中文文献常用网站有&#xff1a; 文献党下载器&#xff08;wxdown.org&#xff09;:是一个几乎整合了所有中外文献数据库资源的文献下载平台&#xff0c;因为资源最多&a…