【unity笔记】图解 Vector3.SignedAngle()方法的返回值

这篇具有很好参考价值的文章主要介绍了【unity笔记】图解 Vector3.SignedAngle()方法的返回值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 这个方法可以理解为:“两个向量之间的夹角(有符号的)”。

我会将它想象成:将两个向量都放在坐标原点,一个向量要向哪个方向旋转多少度 才能与另一个向量重合。

于是我在坐标原点放置了两个向量:OBOA

OB始终躺在X轴正方向,看看OA在4个象限的不同的情况下,OBOA会返回什么值。

向量OB ———>向量OA,旋转轴为:Z轴正方向

float signedAngle = Vector3.SignedAngle ( OB, OA, Vector3.forward );

  • 测试得到的结果记录:

得到的SignedAngle :

vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎 vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎

vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎 vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎

从图三可以看出,结果并未返回225 ,而是 -135。——“ 返回两个可能角度中的较小者 ”

换而言之,结果永远在 (-180度 ,180度) 之间。


  • 关于符号

下图分别测试了OA到OB、OB到OA的结果:

-135,135

(一个思考:为什么OB到OA是逆时针旋转,结果为正? 大概因为旋转轴我传入了Vector3.forward 也就是z轴正方向 + Unity左手坐标系 (我猜)

vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎

而 Vector的此方法,不需要传入旋转轴,只需要from和to的两个向量。得到的结果与此方法的 Vector版本相同(传入z轴正方向)。

        angle = Vector3.SignedAngle(Vector3.right, Vector3.up, Vector3.forward);
        Debug.Log("Vector3 OB -> OA :" + angle.ToString()); //输出 90

        angle = Vector2.SignedAngle(Vector2.right, Vector2.up);
        Debug.Log("Vector2 OB -> OA :" + angle.ToString()); //输出90

vector3.signedangle,Unity,/个人/无意义记录,数学问题,unity,游戏引擎


  • 补充:官方文档的说明

public static float SignedAngle (Vector3 from, Vector3 to, Vector3 axis);

from 测量角度差的源向量。
to 测量角度差的目标向量。
axis 一个向量,其他向量将绕其旋转。

返回 from 与 to 之间的有符号角度(以度为单位)。

返回两个向量之间的两个可能角度中的较小者,因此结果永远不会大于 180 度或小于 -180 度。 如果将 from 和 to 向量想象成一张纸上的线条,两者都源自同一点,则 axis 向量将指向纸外方向。 两个向量之间测量的角度在顺时针方向上为正,在逆时针方向上为负。文章来源地址https://www.toymoban.com/news/detail-822180.html

到了这里,关于【unity笔记】图解 Vector3.SignedAngle()方法的返回值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于 Unity 的 Transform.up 和 Vector3.Up 的测试

    Unity官方文档的 Transform.up 链接 测试方法:提取刚体,坐标系,Space模式为参数,使用上下左右表示物体移动和旋转,测试不同情况的位移和旋转,Console选择Collapse模式 测试脚本 TestScript 如下: 测试场景物体布局如下图: 刚体速度和Translate对比 相同点: 旋转的Space模式不会

    2024年02月03日
    浏览(48)
  • Unity3D 基础——使用 Vector3.Lerp 实现缓动效果

     让一个物体从当前位置移动到另一个位置   Vector3-Lerp - Unity 脚本 API https://docs.unity.cn/cn/current/ScriptReference/Vector3.Lerp.html 1.在场景中新建两个 Cube 立方体,在 Scene 视图中将两个 Cude的位置错开。  2.新建 C# 脚本 MoveToTarget.cs(写完记得保存) 3.将脚本绑定到 Cude 上,然后将其

    2024年02月06日
    浏览(47)
  • new THREE.Vector3(1, 1, 1).normalize();mesh.translateOnAxis(axis, 100);两个方法介绍,

    `new THREE.Vector3(1, 1, 1).normalize()` 是一个使用Three.js库中`Vector3`对象的方法,用于将一个三维向量归一化(normalize)。具体说明如下: 在Three.js中,`Vector3`是一个表示三维向量的对象。使用`new THREE.Vector3(x, y, z)`构造一个新的向量对象,其中`x`、`y`、`z`分别表示向量在X轴、Y轴和

    2024年02月12日
    浏览(45)
  • open3d.utility.Vector3dVector报错RuntimeError

    这个open3d.utility.Vector3dVector()方法可以直接将zyz的点云numpy数据赋值给点云对象的points属性,报错RuntimeError查了有人说是numpy库的版本太高,调整为低版本即可,调整后还是同样报错,后发现是kepoint3d的维度为 [24,4], 如下: 把kepoint3d删掉最后一列即可: axis表示做删除操作的轴

    2024年02月05日
    浏览(33)
  • Unity中的Vector2的使用方法

    (1).判断两个向量是否相等(Equals) (2).设置Vector2的值 a. transform.position不可以单独赋值,需要整体赋值 通过查看底层代码可以看到Transform中的position是属性而不是公有字段 position的类型是Vector3,而Vector3是struct结构体 结论1:用属性和方法返回的结构体是不能修改其字段的 结论2:

    2024年02月08日
    浏览(47)
  • 【100个 Unity实用技能】☀️ | C#泛型集合常用方法,查找符合要求的第一个元素并返回

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(56)
  • unity学习笔记-延迟执行方法

    我辣鸡,不会用

    2024年02月06日
    浏览(35)
  • Unity --- 三维数学 --- Vector类 --- 向量部分

       1.注意每一个数字都表示一段有向位移 --- 有方向的距离 1.从尾到头那一段称为向量的模长 --- magnitude (direction对应的是向量的方向) 2.一个向量有大小 -- 模长(magnitude) , 有方向(direction) 1.向量的模长等于各分量的平方和的平方根 2.由于在计算机中计算平方和要比计算平方

    2024年02月12日
    浏览(33)
  • Unity学习笔记--详细介绍CacheServer、部署方法、以及在Unity中的位置

    最近实习,导入项目的时候非常慢,和leader吐槽了下,他说可以使用CacheServer,导入速度会快一点。没听说过这个名词,leader帮忙解释了下,理解了。今天在网上搜索关于CacheServer的知识,故写此文章,和大家一起学习。 CacheServer是Unity提供的一个高速缓存服务器,用于存储导

    2023年04月24日
    浏览(47)
  • Unity 朝向某个位置移动Vector2.MoveTowards()

    1、使用场景,比如生成的怪物朝向player角色移动,具有最初级的AI 2、Vector2.MoveTowards(当前位置,目标位置,移动速度); 3、为什么不能使用 以目标位置和当前位置的距离作为矢量,叠加在当前的位置值上。因为目标位置和当前位置的距离会变化,因此造成怪物的移动速度变化

    2024年02月16日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包