Unity的旋转实现一些方法总结(案例:通过输入,玩家进行旋转移动)

目录

1. Transform.Rotate 方法

使用

2. Transform.rotation 或 Transform.localRotation 属性与四元数

使用方式:

小案例 :目标旋转角度计算:targetRotation(Quaternion类型)

玩家发现敌人位置,玩家转向敌人的实现

3. Quaternion.LookAt 或 Transform.LookAt 方法

使用方式:

4. Quaternion.Euler 方法

使用方式:

5. 插值方法(如 Quaternion.Lerp 和 Quaternion.Slerp)

使用方式:

插值的拓展:

vector3.lerp()

vector3.erp()

Quaternion.Lerp()

Quaternion.Slerp()

区别:

Quaternion的返回值和参数都是Quaternion

​编辑

Vector3的返回值和参数都是Vector3​编辑

6.以上旋转区别与总结

案例

玩家通过输入来实现移动和转头


transform.rotation  =   类型是  四元数

transform.eularAngle =

transform.LookAt  ()  类型是  vector3

平滑的插值--------------------

slerp lerp 

 vector3.slerp(vector3 a,vector3.b,float t);  意思是从a点到b点旋转时候,时间t

Quaternion.Lerp (quaternion类型,quaternion类型,float);

1. Transform.Rotate 方法

使用

transform.Rotate(Vector3.up * speed * Time.deltaTime);

描述
Rotate 方法直接对物体的本地坐标系应用旋转。它接受一个Vector3参数,表示沿X、Y、Z轴的旋转角度(以度为单位)。也可以接受一个额外的参数来指定旋转是在世界坐标系还是本地坐标系中进行。

特点

  • 直观易用,适用于简单的旋转需求。
  • 由于是直接对角度进行累加,长期旋转可能导致数值不稳定或漂移。

2. Transform.rotation 或 Transform.localRotation 属性与四元数

Transform.rotation  = quaternion类型

Quaternion.Lerp (quaternion类型,quaternion类型,float)

//返回的是quaternion类型 //参数也是quaternion类型

使用方式

Quaternion targetRotation = Quaternion.Euler(90, 0, 0);  
transform.rotation = targetRotation;  //接受的是四元数

或者

Quaternion newRotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * rotationSpeed);   //四元数插值(本身的旋转角度,目标旋转角度,时间)
transform.rotation = newRotation;

小案例 :目标旋转角度计算:targetRotation(Quaternion类型)

Quaternion.LookRotation ( ve3-ve3);//返回的是Quaternion

Quaternion.Lerp()//参数(Quaternion,Quaternion,float)//返回值Quaternion

玩家发现敌人位置,玩家转向敌人的实现


描述

rotation 和 localRotation 属性分别表示物体在世界坐标系和本地坐标系中的旋转,它们都是Quaternion类型。可以使用四元数运算来平滑地插值或组合旋转。

特点

  • 四元数运算可以提供更稳定和平滑的旋转。
  • LerpSlerp等插值方法可以用于实现平滑过渡。
  • 需要对四元数有一定的理解才能正确使用。

3. Quaternion.LookAt 或 Transform.LookAt 方法

使用方式

Quaternion targetRotation = Quaternion.LookAt(transform.position, target.position, Vector3.up);  
transform.rotation = targetRotation;

或者

transform.LookAt(target.position);//敌人的位置 vector3类型

描述
这些方法使物体朝向指定的位置或目标。Quaternion.LookAt返回一个四元数,表示从当前位置朝向目标位置的旋转;Transform.LookAt则直接应用这个旋转到物体的rotation属性上。

特点

  • 适用于让物体朝向特定目标的情况。
  • Transform.LookAt更简洁,但不如使用四元数灵活。

4. Quaternion.Euler 方法

使用方式

Quaternion rotation = Quaternion.Euler(xAngle, yAngle, zAngle);  
transform.rotation = rotation;


描述

Quaternion.Euler 方法根据欧拉角(以度为单位)创建一个四元数。欧拉角是表示三维旋转的一种方式,由绕X、Y、Z轴的三个角度组成。

特点

  • 可以将欧拉角转换为四元数,方便进行旋转操作。
  • 需要注意欧拉角的旋转顺序,不同的顺序可能导致不同的结果。

5. 插值方法(如 Quaternion.Lerp 和 Quaternion.Slerp

使用方式

Quaternion newRotation = Quaternion.Slerp(startRotation, endRotation, t);  
transform.rotation = newRotation;

插值的拓展:

vector3.lerp()

vector3.erp()

Quaternion.Lerp()

Quaternion.Slerp()

区别:

Quaternion的返回值和参数都是Quaternion

Vector3的返回值和参数都是Vector3

描述:

Lerp(线性插值)和Slerp(球面线性插值)用于在两个四元数之间平滑过渡。它们接受起始四元数、结束四元数和一个插值因子t(范围在0到1之间),并返回一个新的四元数。

特点

  • 可以实现平滑的旋转过渡效果。
  • Slerp通常比Lerp更适合用于旋转插值,因为它考虑了旋转的最短路径。

6.以上旋转区别与总结

  • Transform.Rotate 方法简单直观,但长期旋转可能导致数值不稳定。
  • 使用四元数和插值方法(如Slerp)可以实现更稳定和平滑的旋转效果,但需要一定的数学基础。
  • Transform.LookAt 和 Quaternion.LookAt 适用于让物体朝向特定目标
  • Quaternion.Euler 可以将欧拉角转换为四元数进行旋转。

在选择使用哪种方法时,应根据具体需求、旋转的复杂性和性能要求来权衡。

对于简单的旋转,Transform.Rotate 可能足够;

而对于需要平滑过渡或精确控制的旋转,使用四元数和插值方法可能更合适。

案例

玩家通过输入来实现移动和转头

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

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

相关文章

Qt绘制边框有阴影兼容性问题

在Qt开发过程中,有时候我们要显示一个有阴影的对话框,这时一般采用自定义实现,然而最近在开发时软件时,Win11上显示正常,Win10或其他Win11电脑显示不正常,存在兼容性问题吗? 下面是具体的源码 …

【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 | 再谈构造函数:初始化列表,隐式类型转换,缺省值)

🔥个人主页:Forcible Bug Maker 🔥专栏:C 目录 前言 取地址及const取地址操作符重载 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 成员变量缺省值 结语 前言 本篇主要内容:类的六个默认成员函数中…

Nacos分布式配置中心

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://…

Leecode125. 验证回文串

文章目录 概要分析整体架构流程小结 概要 提示&#xff1a;这里可以添加技术概要 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Check Box的使用及说明 文章编号&#xff…

学习c语音的自我感受

因为是自学&#xff0c;所以走过不少弯路。去年&#xff0c;受知乎“python性能弱”风潮的影响&#xff0c;学过go,rust。 在学习这些新语言的时候&#xff0c;由衷感受到&#xff0c;或是本身侧重方向的原因&#xff08;如go侧重服务器&#xff09;&#xff0c;或是语言太新不…

网络变压器在网络分析仪上能通过测试,装上设备后网速达不到呢?

Hqst华轩盛(石门盈盛)电子导读&#xff1a;今天和大家一起探讨网络变压器在网络分析仪上能通过测试&#xff0c;装上设备后网通设备网速达不到的可能原因及其处理方式 一、出现这种情况可能有以下原因&#xff1a; 1.1. 设备兼容性问题&#xff1a;设备其它元器件与 网络…

利用selenium发挥vip残存的价值

历史版本谷歌浏览器驱动下载地址 https://chromedriver.storage.googleapis.com/index.html 找到与你电脑当前谷歌浏览器版本一致的驱动然后下载下来(大版本一致即可)。我本地版本是 99.0.04844.51 我这里把 chromedriver 放到 /usr/local/bin 下面了。 启动测试窗口 这里需要…

文章生成器免费版有哪些,哪个好用?

作为一个长期需要写作的人&#xff0c;对文章生成器自然是非常了解&#xff0c;如果搜文章生成器互联网上多到让人应接不暇&#xff0c;但小编今天要谈的是文章生成器免费版&#xff0c;因为看到很多写手朋友都想找一个免费的文章生成器来用&#xff0c;但是大家在网上搜可能很…

一个 cuda shared library 的通用Makefile

0. 文件结构 device 模版函数放在 library/dev/include/*.cuh 模版的实例化和调用封装在 library/dev/*.cu 针对主机代码调用dev 函数而提供的头文件放在 library/dev/*.h, 也就是*.cu中主机函数的声明&#xff1b; 业务逻辑放置在 lib/src/*.cpp中&#xff0c;调用library/…

Vue的虚拟DOM是什么

核心思想 虚拟DOM/Virtual DOM&#xff0c;是数据驱动视图的一种解决方案。核心思想&#xff1a;使用 js对象的形式来表现html的dom结构。 背景 由于现代网络和浏览器的发展&#xff0c;网页的内容也变得很复杂&#xff0c;ajax 诞生让用户可以在不刷新页面的条件下获取到数…

ubuntu18.04安装F4PGA教程

环境搭建教程&#xff1a; f4pga-arch-defs/xilinx/xc7 at main f4pga/f4pga-arch-defs GitHub git clone https://github.com/SymbiFlow/f4pga-arch-defs.git cd f4pga-arch-defs make env cd build 主要是make env&#xff0c;会下载很多东西&#xff0c;然后生成很多描…