Vector3.Dot

news2024/11/25 11:31:25

如图:cube在cube(2)的前方、

public class DotTest : MonoBehaviour
{
    public GameObject a;
    public GameObject b;
    // Start is called before the first frame update
    void Start()
    {
        var v=Vector3.Dot(a.transform.forward,b.transform.position
-a.transform.position);
        Debug.Log(v);
    }
}

 

 结果显示:

 unity官方文档这样描述:

这里我将两个向量传入,第一个为cube本身的正方向,第二个为cube指向cube(2)的方向,由于向量点乘等于其各自模长相乘再乘上二者之间的余弦值,所以Vector3.Dot返回值的正负取决于其夹角。

 可以看到测试时夹角大于90°,可以试想一下,对于a.transform.forward和b.transform.position
-a.transform.position这两个向量,当cube(2)在自身(cube)的前方时,其夹角永远小于90°,在后方时,永远大于90°,如此可依据点乘来判断“敌人”相对于自身的位置(前方or后方)

那么如何得到角度的具体值呢?我们可以利用反三角函数,其API为

 同理还有其它三角函数的这里就只考虑这个,既然返回的是弧度,那就需要弧度转角度,再乘一个Mathf.Rad2Deg即可。

public class DotTest : MonoBehaviour
{
    public GameObject a;
    public GameObject b;
    // Start is called before the first frame update
    void Start()
    {
        var v=Vector3.Dot(a.transform.forward,b.transform.position-a.transform.position);
        Debug.Log(v);
        var v1=Mathf.Acos(v/((b.transform.position- 
           a.transform.position).magnitude))*Mathf.Rad2Deg;
        Debug.Log(v1);
    }
}

值得注意的是:Acos里应传入角度,也就是要用v除去两向量的模长,但是forward模长为1可以不用考虑

结果为:

或者:

public class DotTest : MonoBehaviour
{
    public GameObject a;
    public GameObject b;
    // Start is called before the first frame update
    void Start()
    {
        var v=Vector3.Dot(a.transform.forward,(b.transform.position-a.transform.position).normalized);
        Debug.Log(v);
        var v1=Mathf.Acos(v)*Mathf.Rad2Deg;
        Debug.Log(v1);
    }

}

或者

 

        var x=Vector3.Angle(a.transform.forward,b.transform.position-a.transform.position);
        Debug.Log(x);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

丑数 II 力扣(动态规划)JAVA

给你一个整数 n ,请你找出并返回第 n 个 丑数 。 丑数 就是只包含质因数 2、3 和/或 5 的正整数。 示例 1: 输入:n 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。 示例 2&#xff…

MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

文章目录 前言 一 MySQL数据库 1.1 什么是数据库? 1.2 RDBMS 术语 1.3 DBMS解释 1.4 数据库分类 1.5 MySQL现状 二 在Linux/UNIX 上安装 MySQL 2.1 安装 MySQL 2.2 验证 MySQL 安装 2.3 使用 MySQL Client(Mysql客户端) 执行简单的SQL命令 2.4 Mysql安装…

153、仿真-基于51单片机四相步进电机正反转控制系统设计(程序+Proteus仿真+参考论文+流程图+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图​ 三、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一:ST…

代码随想录算法训练营一刷总结

第一次系统地刷leetcode 经过两个多月终于一刷完结 虽然不是按部就班每天都写 但总算坚持下来了 夸夸自己!! 非常感谢卡哥 题目的解析都写的很清楚易懂 才让我能够坚持这么一题一题做下来 没有卡住不前 训练营的学习氛围让我感受到很多小伙伴在和我一起…

服务器数据库中了Locked勒索病毒,企业应该如何正确处理并采取后续防护措施

网络技术的发展极大地方便了人们的工作生活,但同样带来了一定的网络安全威胁,其中较为危险的威胁就是勒索病毒攻击,勒索病毒不仅会给我们的计算机系统带来破坏,还会加密我们的重要文件数据来敲诈勒索,只有用户支付的赎…

灾备基础学习

灾备 灾备:灾备是容灾和备份的简称,它是利用科学的技术手段和方法,提前建立系统化的数据应急方式,以应对灾难的发生。其内容包括:数据备份、系统备份、业务连续规划、人员架构、通信保障、危机公关、灾难恢复规划、灾…

ES6基础知识五:你是怎么理解ES6新增Set、Map两种数据结构的?

如果要用一句来描述,我们可以说 Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构 什么是集合?什么又是字典? 集合 是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合 字典 是…

unity的asmdef报错GUID(这个报错记得重现一下,报错信息作为标题记录一下)

这应该是unity给这个程序集分配的guid unity基于2020开发的科骏插件1.0.8,放到了2017.首先出现的这个报错。 解决方法是将这个asmdef删除。asmdef简单来说是 库的描述信息文件。相关参考 初步理解Unity的asmdef 删掉就没分库直接所有源码在工程。简单来说就是编译…

深度学习:Pytorch最全面学习率调整策略lr_scheduler

深度学习:Pytorch最全面学习率调整策略lr_scheduler lr_scheduler.LambdaLRlr_scheduler.MultiplicativeLRlr_scheduler.StepLRlr_scheduler.MultiStepLRlr_scheduler.ConstantLRlr_scheduler.LinearLRlr_scheduler.ExponentialLRlr_scheduler.PolynomialLRlr_sched…

Nginx 301 https跳转后出现跨域和混合内容问题 —— 筑梦之路

问题 在浏览器地址栏敲入url访问静态资源目录时,发现默认跳转到了http协议的地址 如上图所示,客户端https请求先到达API网关,然后网关将请求通过http协议转发到静态资源服务器。 调出浏览器发现客户端发送的https请求收到了一个301状态码的响…

WPF实现DiagramChart

1、文件架构 2、FlowChartStencils.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:s"clr-namespace:DiagramDesigner"xmlns:c&…

数据结构【数组、串、广义表】

第四章 数组、串、广义表 一、数组 1.概念&#xff1a;线性表是通过数组实现的&#xff0c;数组是线性表的推广&#xff0c;数组只有存取元素和修改元素的操作&#xff08;除了初始化和销毁&#xff09;&#xff1b; 2.数组的存储结构&#xff1a;一个数组的所有元素在内存中占…

第八章:list类

系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类&#xff0c;可以在常数范围内在任意位置进行插入和删除的序列式容器。 …

【iOS】isKindOfClass和isMemberOfClass方法

前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解&#xff0c;也就是苹果官方这幅图&#xff1a; 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现&#xff0c;无论是谁调用isKindOfClass方法都会…

系统学习Linux-MySQL服务基础(一)

一、MySQL服务概述 什么是数据库&#xff1f; 将大量数据保存起来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合 数据库是存储、管理和操作组织化数据的软件系统 数据库能干什么&#xff1f; 企业应用存放用户数据、管理企业数据金融行业存储分析客户的财务…

Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%

Stable Diffusion是一种基于扩散模型的图像生成技术&#xff0c;能够从文本生成高质量的图像&#xff0c;适用于CG&#xff0c;插图和高分辨率壁纸等领域。 但是它计算过程复杂&#xff0c;使得它的生成速度较慢。所以研究人员就创造了各种提高其速度的方式&#xff0c;比如Xf…

Springboot读取配置的一些方式

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑。 下面整理了几种获取配置属性的方式&#xff0c;弄清配置加载、读取的底层原理&#xff0c;一旦出现问题可以分析。 以下示例源…

Linux基础开发工具之Linux编译器的使用(gcc/g++)

目录 前言 1.背景知识介绍 2.预处理阶段 3.编译阶段 4.汇编阶段 5.链接过程 5.1 函数库 5.1.1 静态库和动态库 5.2 链接过程的具体内容 总结 前言 大家好呀&#xff0c;许久没给大家更新了&#xff0c;对于我们在Linux环境下编程&#xff0c;之前小编只是给大家介绍…

Ubuntu安装JDK与IntelliJ IDEA

目录 前言 Ubuntu安装JDK 1、更新软件包列表 2、安装OpenJDK 3、验证安装 Ubuntu安装IntelliJ IDEA 1、下载 IntelliJ IDEA 2、解压缩 IntelliJ IDEA 安装包 3、移动 IntelliJ IDEA 到安装目录 4、启动 IntelliJ IDEA 前言 APT&#xff08;Advanced Package Too…

react 在build读取env 数据

默认会读取.env 文件 npm install dotenv --save npm install dotenv-cli --save-dev例如读取.env.test "build:test": "dotenv -e .env.test react-app-rewired build",.env.test REACT_APP_CURRENTMODE devREACT_APP_Public_Path "https://baid…