【Unity每日一记】关于物体(敌方)检测—(向量点乘相关)

这篇具有很好参考价值的文章主要介绍了【Unity每日一记】关于物体(敌方)检测—(向量点乘相关)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity每日一记

⭐🅰️推荐文章⭐


⭐【Unityc#专题篇】之c#系统化大礼包】

⭐【unity数据持久化】数据管理类_PlayerPrfs

⭐【unity本站最全系列】unity常用API大全一篇文章足以
【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量


⭐⭐



🎶(A) 碰撞器和触发器的网格检测

【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量


🎶(B) 向量点乘检测


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 关于物体的检测:物体在前方5米内45度角中方可检测到
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class targetPrage : MonoBehaviour
{
    public Transform target; //目标物体

    private void Update()
    {
        if(Vector3 .Distance(transform.position ,target.position )<= 5)
        {
            //向量检测
            //B-A = AB,此时是单位向量的乘积
            //点乘的结果是余弦值
            float vaule = Vector3.Dot(transform.forward, (target.position - transform.position).normalized );
            //反三角函数计算夹角
            if(Mathf.Acos(vaule * Mathf.Deg2Rad)<30f)
            {
                Debug.Log("敌军来袭");
            }
        }
     

    }
}


🎶(C) Vector3API检测


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 关于物体的检测:物体在前方5米内45度角中方可检测到
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class targetPrage : MonoBehaviour
{
    public Transform target; //目标物体

    private void Update()
    {
        if(Vector3 .Distance(transform.position ,target.position )<= 5)
        {
            //向量检测
            //B-A = AB,此时是单位向量的乘积
            float vaule = Vector3.Dot(transform.forward, (target.position - transform.position).normalized );
            if(Vector3 .Angle (transform.position  ,target .position )<30f)
            {
                Debug.Log("敌军来袭");
            }
        }
     

    }
}


🎶(D)物理范围瞬时检测


特点:

  • 1.执行该句代码时 进行一次范围检测 它是瞬时的
  • 2.范围检测相关API 并不会真正产生一个碰撞器 只是碰撞判断计算而已

共同参数:

  • 参数一:物体中心点
  • 参数二:物体的边长大小
  • 参数三:物体的角度
  • 参数四:检测指定层级(不填检测所有层)
  • 参数五:是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 (不填使用UseGlobal)
  • 返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)

1.方块状范围检测


  • Physics.OverlapBox ——返回值为数组,存储检测到的碰撞器
 Collider[] colliders = Physics.OverlapBox( Vector3.zero, Vector3.one, 
 Quaternion.AngleAxis(45, Vector3.up), 
        1 << LayerMask.NameToLayer("UI") |
        1 << LayerMask.NameToLayer("Default"), QueryTriggerInteraction.UseGlobal);
  • Physics.OverlapBoxNonAlloc——返回值为Int 表示检测的数量(最多6个参数)
if(Physics.OverlapBoxNonAlloc(Vector3.zero, Vector3.one, 自定义数组名) != 0)


2.球形状范围检测


无角度参数
参数二为球半径

  • Physics.OverlapSphere
    colliders = Physics.OverlapSphere(Vector3.zero, 5, 1 << LayerMask.NameToLayer("Default"));
  • Physics.OverlapSphereNonAlloc——同BOX
   if( Physics.OverlapSphereNonAlloc(Vector3.zero, 5, colliders) != 0 )

3.胶囊体范围检测


参数一:半圆一中心点
参数二:半圆二中心点
参数三:半圆半径

  • Physics.OverlapCapsule
        colliders = Physics.OverlapCapsule(Vector3.zero, Vector3.up, 1, 1 << LayerMask.NameToLayer("UI"), QueryTriggerInteraction.UseGlobal);
  • Physics.OverlapCapsuleNonAlloc

if ( Physics.OverlapCapsuleNonAlloc(Vector3.zero, Vector3.up, 1, colliders ) != 0 )



🎶(O)Ray射线检测


  • 特点
    只需要判断一条线和物体的碰撞情况
    可以在指定点发射一个指定方向的射线
    判断该射线与哪些碰撞器相交,得到对应对象
    瞬时

  • 应用场景
    1.鼠标选择场景上一物体
    2.FPS射击游戏(无弹道-不产生实际的子弹对象进行移动)等

射线声明


API

  • Ray X = new Ray(Vector3.right, Vector3.forward);
参数一 参数二
起点 方向
X.origin X.direction
  • Ray XX = Camera.main.ScreenPointToRay(Input.mousePosition);
    屏幕视口坐标转成射线——鼠标点击的地方变成射线

Physics.Raycast 普通射线


  • Physics.Raycast 无法检测碰到了谁,只会检测碰到了没有

最多有16个重载

Physics.Raycast常用参数 作用
参数 射线
参数 检测的最大距离 超出这个距离不检测
参数 检测指定层级(不填检测所有层)
参数 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal
返回 bool 当碰撞到对象时 返回 true 没有 返回false
//第一种写法
Physics.Raycast(XX, 1000, 
1 << LayerMask.NameToLayer("层级名字"), 
QueryTriggerInteraction.UseGlobal   )

//第二种写法
Physics.Raycast(Vector3.right, Vector3.forward,  
1 << LayerMask.NameToLayer("层级名字"), 
QueryTriggerInteraction.UseGlobal   )

RaycastHit 物体信息类

  • RaycastHit 物体信息类——得到相交的单个物体物理信息
    【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量
RaycastHit 在Physics.Raycast的应用 作用
参数 射线
参数 out RaycastHit 为什么是out ?RaycastHit是结构体 是值类型 out加上去就变成了引用类型,而RaycastHit没有复制所以不用ref
参数 检测的最大距离 超出这个距离不检测
参数 检测指定层级(不填检测所有层)
参数 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal
返回 bool 当碰撞到对象时 返回 true 没有 返回false
//写法一
      RaycastHit YY;   
     if( Physics.Raycast(XX, out YY, 1000, 
     
     1<<LayerMask.NameToLayer("层级名字"), 
     
     QueryTriggerInteraction.UseGlobal) )
     
//写法二
if( Physics.Raycast(Vector3.right, Vector3.forward, out YY, 1000,
 
     1<<LayerMask.NameToLayer("层级名字"), 
     
     QueryTriggerInteraction.UseGlobal) )
  • 碰撞到物体的名字 YY.collider.gameObject.name;
  • 碰撞到的点 YY.point
  • 法线信息 YY.normal
  • 碰撞到对象的位置 YY.transform.position
  • 碰撞到对象 离自己的距离 YY.distance等等

Physics.RaycastAll 得到多个物体信息


  • RaycastHit[] XX= Physics.RaycastAll——得到相交的多个物体物理信息

【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量
特点: 先碰到的在数组的后面


Physics.RaycastNonAlloc 返回的碰撞的数量


  • Physics.RaycastNonAlloc——返回的碰撞的数量 通过out得到数据
  if((r3, XX, 1000, 1 << LayerMask.NameToLayer("Monster"), 
  QueryTriggerInteraction.UseGlobal) > 0 )
 
        {
        }

⭐🅰️系统路线学习点击跳转⭐


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


【Unity每日一记】关于物体(敌方)检测—(向量点乘相关),# Unity每日一记,unity,游戏引擎,c#,向量文章来源地址https://www.toymoban.com/news/detail-648686.html


到了这里,关于【Unity每日一记】关于物体(敌方)检测—(向量点乘相关)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity每日一记】资源加载相关和检测相关

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月07日
    浏览(44)
  • Unity中向量的点乘、叉乘区别和作用以及经典案例

    unity开发中我们要计算角度,判断位置,常用点乘、叉乘、归一化等等,我们看看他们的使用案例 点乘(Dot Product) 在Unity中的Vector3类提供了 Dot() 方法来计算两个向量的点乘。点乘的结果是一个标量值,可以用于判断两个向量的方向关系或者计算投影长度等。 叉乘(Cross P

    2024年04月28日
    浏览(39)
  • 【unity每日一记】unity中常见的特性大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(87)
  • 【unity每日一记】transform类精华之珠

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(48)
  • 【unity每日一记】资源和场景加载图文详解

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月10日
    浏览(44)
  • 【Unity每日一记】资源加载相关你掌握多少?

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月12日
    浏览(38)
  • 【Unity每日一记】SceneManager场景资源动态加载

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月12日
    浏览(42)
  • 【Unity每日一记】Unity不知道如何选择,移动方法,来瞧瞧

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年04月15日
    浏览(49)
  • 【Unity每日一记】WheelColider组件汽车游戏的关键

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月10日
    浏览(40)
  • 【Unity每日一记】摄像机相关代码API大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 直接作为子对象课实现简单跟随 通过向量的加减更新相机位置来保持简单的跟随 差值位置的实时更新 😶‍🌫️步骤:

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包