Unity向量按照某一点进行旋转

Unity向量按照某一点进行旋转

  • 一、unity的旋转
  • 二、向量按照原点进行旋转
    • 注意
    • 案例
  • 三、向量按照指定位置进行旋转
    • 案例

一、unity的旋转

首先要知道一点就是在Unity的旋转中使用过四元数进行旋转的,如果对一个物体的rotation直接赋值你会发现结果不是你最终想要的结果,这个时候我们需要去借助Quaternion来进行旋转。

二、向量按照原点进行旋转

用到的Unity内置方法Quaternion.AngleAxis(float angle,Vector3 axis)
第一个参数就是我们需要旋转的角度 angle大于0时是按照顺时针的方向进行旋转,angle小于0是按照逆时针的方向旋转,这里的旋转时按照坐标原点进行的旋转。
第二个参数是旋转轴,围绕哪一个坐标轴进行旋转。

注意

使用这个方法时获得的也是四元数,我们将其转换成向量Vector3是需要乘以自身的坐标(四元数 * 自身向量,如果反过来 自身向量 * 四元数 在Unity会发生编译错误,这里需要注意一下)

案例

将Vector3(1,0,1)按照原点旋转45°,90°,180°,270°测试分别用黑、黄、蓝、绿颜色表示
在这里插入图片描述
代码如下:

using UnityEngine;[ExecuteInEditMode]
public class VectorDirTest : MonoBehaviour {// Update is called once per framevoid Update () {Debug.DrawLine(Vector3.left * 5f,Vector3.right * 5f,Color.red);Debug.DrawLine(Vector3.up * 5f,Vector3.down * 5f,Color.green);Debug.DrawLine(Vector3.forward * 5f,Vector3.back * 5f,Color.blue);Vector3 dir = new Vector3(1,0,1);Debug.DrawLine(Vector3.zero,dir,Color.white);Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(45,Vector3.up) * dir,Color.black);Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(90,Vector3.up) * dir,Color.yellow);Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(180,Vector3.up) * dir,Color.blue);Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(270,Vector3.up) * dir,Color.green);}
}

三、向量按照指定位置进行旋转

/// <summary>/// 围绕某点旋转指定角度/// </summary>/// <param name="position">自身坐标</param>/// <param name="center">旋转中心</param>/// <param name="axis">围绕旋转轴</param>/// <param name="angle">旋转角度</param>/// <returns></returns>public Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle){return Quaternion.AngleAxis(angle, axis) * (position - center) + center;}

案例

将Vector3(1,0,1)按照Vector(2,0,2)旋转45°,90°,180°,270°测试分别用红、黄、蓝、绿颜色表示
在这里插入图片描述

代码如下:

using UnityEngine;[ExecuteInEditMode]
public class VectorDirTest : MonoBehaviour {// Update is called once per framevoid Update () {Debug.DrawLine(Vector3.left * 5f,Vector3.right * 5f,Color.red);Debug.DrawLine(Vector3.up * 5f,Vector3.down * 5f,Color.green);Debug.DrawLine(Vector3.forward * 5f,Vector3.back * 5f,Color.blue);Vector3 dir = new Vector3(1,0,1);Vector3 point = new Vector3(2,0,2);Debug.DrawLine(Vector3.zero, RotateRound(dir, point, Vector3.up, 45), Color.red);Debug.DrawLine(Vector3.zero, RotateRound(dir, point, Vector3.up, 90), Color.yellow);Debug.DrawLine(Vector3.zero, RotateRound(dir, point, Vector3.up, 180), Color.blue);Debug.DrawLine(Vector3.zero, RotateRound(dir, point, Vector3.up, 270), Color.green);Debug.DrawLine(Vector3.zero, dir, Color.black);}/// <summary>/// 围绕某点旋转指定角度/// </summary>/// <param name="position">自身坐标</param>/// <param name="center">旋转中心</param>/// <param name="axis">围绕旋转轴</param>/// <param name="angle">旋转角度</param>/// <returns></returns>public Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle){return Quaternion.AngleAxis(angle, axis) * (position - center) + center;}
}

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

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

相关文章

迎新辞旧,欢度元旦

迎新辞旧&#xff0c;欢度元旦 新年钟声即将敲响&#xff0c;欢度元旦的时刻即将来临。在这个美好的时刻&#xff0c;我们纷纷辞旧迎新&#xff0c;放飞自我追逐梦想的翅膀。让羊大师带大家一起来庆祝新年的到来&#xff0c;共同创造美好的开始&#xff01; 一、迎新辞旧&…

希尔排序详解(C语言)

前言 希尔排序是一种基于插入排序的快速排序算法。所以如果还会插入排序的小伙伴可以点击链接学习一下插入排序&#xff08;点我点我&#xff01;&#xff09; &#xff0c;相较于插入排序&#xff0c;希尔排序拥有更高的效率&#xff0c;小伙伴们肯定已经迫不及待学习了吧&…

OPNET Modeler帮助文档的打开方式

前面有篇文章修改OPNET帮助文档的默认打开浏览器 & 给Edge浏览器配置IE Tab插件已经提到了打开OPNET Modeler打开帮助文档的方法&#xff0c;有时候打开时会显示如下。 界面中没有什么内容加载出来&#xff01;我是在Google浏览器中打开的&#xff0c;其他的浏览器也是一样…

10000个jpg图片文件如何按数量放在20个文件夹中的方法

日常工作中在处理大量文件时&#xff0c;如何有效地将它们分类和管理变得至关重要。在这种情况下&#xff0c;有10000个jpg图片&#xff0c;要如何把它们按数量放在20个文件夹&#xff0c;如何避免手动操作呢&#xff1f;现在一起来看看云炫文件管理器批量移动文件的具体操作吧…

智慧燃气为 “ 城市生命线 ” 打造“看得见”的安全

关键词&#xff1a;智慧燃气、智慧燃气平台、智慧燃气管网、燃气数字化、智慧燃气系统、智慧燃气解决方案 近年来&#xff0c;随着互联网技术、物联网技术、大数据、云计算技术的飞速发展&#xff0c;“互联网”已成为重要的国家战略&#xff0c;各行业都在寻求智能化转型之路…

flowable任务分配方式篇动态部门经理:固定分配、表达式分配、监听器分配

这里写自定义目录标题 1、固定分配2、表达式分配在此流程部署了之后&#xff0c;在流程定义信息表中可以看到此流程的相关信息启动流程查看我们设置的变量在task表中&#xff0c;可以看到当前分配人是张三&#xff0c;说明值表达式被解析了 完成任务在张三完成任务之后&#xf…

为什么pmp证书只能对标cspm二级证书?

拿PMP认证可以直接认证CSPM&#xff1f;快来看看你符合哪个等级&#xff01; PMP认证大家了解的可能比较多&#xff0c;它推出的时间较长&#xff0c;并且仅在国内拿到认证的人数也与日俱增。而CSPM相对来说大家就比较陌生了&#xff0c;它是哪些部门发起的&#xff0c;有什么用…

云渲染UE4像素流送搭建(winows、ubuntu单实例与多实例像素流送)

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行&#xff0c;用户可以通过浏览器操作虚幻引擎应用程序&#xff0c;客户端无需下载虚幻引擎&#xff0c;本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述&#xff1a; ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL&#xff0c;底线是允许用在不开源商业软件中&#xff0c;意思就是免费使用。具体可访问ICSha…

图片素材管理软件Eagle for mac提高素材整理维度

Eagle for mac是一款图片素材管理软件&#xff0c;支持藏网页图片&#xff0c;网页截屏&#xff0c;屏幕截图和标注&#xff0c;自动标签和筛选等功能&#xff0c;让你设计师方便存储需要的素材和查找&#xff0c;提供工作效率。 Eagle mac软件介绍 Eagle mac帮助你成为更好、…

比宜德停业,奥乐齐死磕,硬折扣该怎样长硬不衰?

作者 | 楚文龙 来源 | 洞见新研社 刚刚过去的周末&#xff0c;让零售行业的从业者神经紧绷。因为&#xff0c;12月23日多个信源曝出&#xff0c;社区硬折扣超市比宜德已公告于12月22日起暂停营业。 作为中国第一家&#xff0c;也是唯一一家规模最大的硬折扣社区连锁店零售商&…

计算机视觉五大技术

目前&#xff0c;计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科&#xff0c;包括计算机科学&#xff08;图形、算法、理论、系统、体系结构&#xff09;&#xff0c;数学&#xff08;信息检索、机器学习&#xff09;&#xff0c;工程…

ERP系统的优缺点有哪些?

企业在考虑引进ERP系统时总是比较谨慎的&#xff0c;毕竟&#xff0c;ERP关乎着企业的整体运营和未来发展。因此&#xff0c;选择适合的ERP系统对企业未来的成功至关重要。要全面评估&#xff0c;看看它到底能给企业带来啥好处&#xff0c;又可能会有啥风险。 看完这篇回答&am…

如何进行块存储管理

目录 块存储概念 块存储&#xff08;云盘&#xff09;扩容 方式一&#xff1a;直接扩容现有云盘 方式二&#xff1a;创建一块新数据盘 方式三&#xff1a;在更换操作系统时&#xff0c;同时更换系统盘 块存储&#xff08;云盘&#xff09;变配 云盘变配操作步骤 块存储概…

【Web】Ctfshow Thinkphp3.2.3代码审计(3)

web574 这题与web573的区别在于进find()前先进了where()处理 跟进where() 我们假设传个1&#xff0c;和id拼接 发现会进到is_string的判断里&#xff0c;让$options[where]array("_string">"1") 之后传入到find()&#xff0c;和web573一样也是以数组…

因吹斯汀!只需上传照片,GPT-4V精准识别食物的卡路里和摄入热量

健身和减肥的朋友有福啦&#xff01; 最近一篇文章探索了GPT-4V在膳食评估领域的强大能力&#xff0c;可以根据饮食图片精准判断食物的种类与重量&#xff0c;并给出营养成分的分析&#xff0c;包括碳水化合物、蛋白质、脂肪占比。 最最重要的是&#xff0c;它还能告诉我们这…

如何进行实例管理

目录 修改实例规格 修改网络带宽 网站的访问量每天都比较高&#xff0c;网站明显变慢了&#xff0c;这是怎么回事&#xff1f; 这说明你的网站的并发访问能力已经不足了&#xff0c;并发访问是指同一时间&#xff0c;多个用户请求访问同一个域名下的资源或服务&#xff0c;请…

掌握JWT:解密身份验证和授权的关键技术

JSON Web Token 1、什么是JWT2、JWT解决了什么问题3、早期的SSO认证4、JWT认证5、JWT优势6、JWT结构Header 标头Payload 负载 Signature 签名 7、代码实现添加依赖生成Token认证token 8、工具类9、JWT整合Web10、拦截器校验11、网关路由校验12、解决多用户登录的问题13、客户端…

线程学习(3)-volatile关键字,wait/notify的使用

​ &#x1f495;"命由我作&#xff0c;福自己求"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;线程学习(2)​​​​ 一.volatile关键字 volatile关键字是多线程编程中一个非常重要的概念&#xff0c;它主要有两个功能&#xff1a;保证内存可见性…

面向对象设计与分析40讲(15)简单工厂方法模式

文章目录 定义示例优缺点定义 简单工厂模式是一种创建型模式,用于根据客户端的需求创建对象实例,所谓的需求反映到编程语言里就是传入的参数。 简单工厂模式包括三个主要部分: 工厂类(Simple Factory):这是整个模式的核心。它负责根据客户端的请求来创建并返回相应的对…