服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity向量按照某一点进行旋转

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

2022-08-17 10:05类人_猿 C#

这篇文章主要为大家详细介绍了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°测试分别用黑、黄、蓝、绿颜色表示

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
 
[ExecuteInEditMode]
public class VectorDirTest : MonoBehaviour {
 
 // Update is called once per frame
 void 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);
 
 }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
/// <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°测试分别用红、黄、蓝、绿颜色表示

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using UnityEngine;
 
[ExecuteInEditMode]
public class VectorDirTest : MonoBehaviour {
 
 
 
 
 // Update is called once per frame
 void 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;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_42194657/article/details/104019679

延伸 · 阅读

精彩推荐
  • C#C#实现任务栏通知窗口

    C#实现任务栏通知窗口

    作为程序员在享受的同时我们也不禁要问:这到底是怎么实现的呢?本文就利用Visual Studio .Net C# 2005以及.Net框架绘图技术来实现这种任务栏通知窗口。...

    C#教程网10812021-10-29
  • C#使用C#语言实现的查询条件界面展开和收起功能

    使用C#语言实现的查询条件界面展开和收起功能

    这篇文章主要介绍了使用C#语言实现的查询条件界面展开和收起功能的完美解决方案,需要的朋友可以参考下...

    北风其凉11472021-12-10
  • C#C#中值类型和引用类型解析

    C#中值类型和引用类型解析

    这篇文章主要为大家详细介绍了C#中值类型和引用类型的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Amedeo12032022-01-24
  • C#C#基于纯数学方法递归实现货币数字转换中文功能详解

    C#基于纯数学方法递归实现货币数字转换中文功能详解

    这篇文章主要介绍了C#基于纯数学方法递归实现货币数字转换中文功能,涉及C#针对字符串的遍历、转换与数学运算相关操作技巧,需要的朋友可以参考下...

    念时12072021-12-24
  • C#C#实现图片切割的方法

    C#实现图片切割的方法

    这篇文章主要介绍了C#实现图片切割的方法,涉及C#使用Graphics实现图片属性的相关设置、保存等操作技巧,需要的朋友可以参考下...

    JoeBlackzqq8852022-01-07
  • C#C#连接到sql server2008数据库的实例代码

    C#连接到sql server2008数据库的实例代码

    这篇文章主要介绍了C#连接到sql server2008数据库的实例代码,需要的朋友可以参考下...

    醉墨重生11602022-01-21
  • C#C#统计C、C++及C#程序代码行数的方法

    C#统计C、C++及C#程序代码行数的方法

    这篇文章主要介绍了C#统计C、C++及C#程序代码行数的方法,较为详细的分析了C#统计文本文件的原理与相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参...

    北风其凉7842021-10-19
  • C#WinForm实现仿视频播放器左下角滚动新闻效果的方法

    WinForm实现仿视频播放器左下角滚动新闻效果的方法

    这篇文章主要介绍了WinForm实现仿视频播放器左下角滚动新闻效果的方法,涉及WinForm窗口滚动字幕设置的实现技巧,具有一定参考借鉴价值,需要的朋友可以参...

    我心依旧4002021-10-21