http://specialwolf.blog.163.com/blog/static/124466832201301332432766/

***********************************

极简单却又极坑的问题

以下代码用来实现: 已知某gameObject的方向, 由此得到此方向偏转某角度后的方向.

附: Transform.forward 和 Vector3.forward 不同.

Transform.forward是世界坐标系下物体的正方向,即编辑器中物体的蓝色轴。

Vector3.forward只不过是vector(0, 0, 1)的缩写

鄙视一下此类蛋疼的写法.

Vector3 dVector = playerObj.transform.forward;

Vector3 newVector;

if(i > maxCount/2)
{
newVector = Quaternion.AngleAxis(-20*(maxCount -i), Vector3.up) * dVector;
}
else
{
newVector = Quaternion.AngleAxis(20*i, Vector3.up) * dVector;
}

  

附打印出来的几个 :

playerObj.transform.forward;

/*
正前 0 0 1
左30 -0.6 0 0.8
左 -1 0 0
左下 -0.6 0 -0.8
下 0 0 -1
*/

************************************

在使用Unity引擎时很多朋友都会遇到这样的问题,即关于方向(专业点说是矢量)的旋转问题。

如左图中,很多朋友都会使用Vector3.forward来表示“前方”,具体到角色身上时就是transform.forward了,有时我们需要将该方向基于角色所在的位置旋转N度,对于新手、没有经过正规的游戏编程培训或数学不怎么好的朋友(这里其实说我自己),这里是有些恼人的,但在Unity官方论坛上有人给出了答案,我这里只是整理了一哈:

参考:http://answers.unity3d.com/questions/46770/rotate-a-vector3-direction.html

// 将角色或车轮向右旋转30度

Vector3 newVector = Quaternion.AngleAxis(30, Vector3.up) * Vector3.forward;

// 或者

Vector3 newVector = Quaternion.Euler(0,30,0) * Vector3.forward;

要注意的就是该运算是有顺序的,必须将四元数放在前面。

附带说明一下如何实现一个点围绕另外一个点旋转指定角度的问题(注意这里只是说明基于二维情况下的旋转),其实这纯粹是一个数学问题,只不过是如何在Unity中实现罢了。

可以先看一下解决思路:

http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2drota.htm

这是高中的教材内容,可惜……

怎么用编程表示该内容呢?通用编程可以考虑这里:

http://stackoverflow.com/questions/2259476/rotating-a-point-about-another-point-2d

如果你也是使用Unity做为开发引擎,可以参考如下代码:如下代码是考虑基于Y轴旋转的,所以你可以将点(x,z)看做平面内的一个支点,angle表示要基于(x,z)点旋转的角度,point是要旋转的点,具体代码如下:

Vector3 RotatePoint(float x, float z, float angle, Vector3 point)

{

// Translate point back to origin;

Vector3 temp = new Vector3(point.x -= x, point.y, point.z -= z);

// Roate the point

float xNew = Mathf.Cos(angle * Mathf.Deg2Rad) * (point.x) - Mathf.Sin(angle * Mathf.Deg2Rad) * (point.z);

float zNew = Mathf.Sin(angle * Mathf.Deg2Rad) * (point.x) + Mathf.Cos(angle * Mathf.Deg2Rad) * (point.z);

temp.x = xNew + x;

temp.z = zNew + z;

return temp;

}

在三维空间中基于某点旋转特定角度可以参考:

http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/ArbitraryAxisRotation.html

http://blog.client9.com/2007/09/rotating-point-around-vector.html

Author : Neo

Date : 2013-01-13

Email : specialwolf.neo(at)gmail.com

[转]Unity 3D旋转矢量方向及二维平面基于一点选择另一点(Rotate a Vector3 direction & Rotate a point about another point in 2D )的更多相关文章

  1. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

  2. Unity手游之路<四>3d旋转-四元数,欧拉角和变幻矩阵

    http://blog.csdn.net/janeky/article/details/17272625 今天我们来谈谈关于Unity中的旋转.主要有三种方式.变换矩阵,四元数和欧拉角. 定义 变换矩 ...

  3. Unity 3D 中实现对物体 位置(position) 旋转(rotation) 大小(scale) 的全面控制

    今天分享一些基础控制的脚本 1.位置(Position): 控制位置很简单,首先要知道要在xyz哪几个轴上移动,确定好后定义代表着那些轴的移动变量,速度(m_speed在函数外定义为全局变量)然后通过 ...

  4. 再议Unity 3D

    一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此 ...

  5. Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果

    Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...

  6. 关于Unity中的transform组件(二)

    在Scene视图中的蓝色网格,每一格默认是1米 一.沿着Z轴每秒移动10米 Transform cube_trans; void start(){ this.cube_trans=this.trans ...

  7. Unity 3d导入3dMax模型 产生若干问题

    Unity 3d导入3dMax模型 会产生若干问题,按照官方 的说明,将max 模型导成fbx文件 导入untiy似乎也不能解决 1.x轴向偏转3dmax模型导入后自动有一个x轴270度的偏转,巧合的 ...

  8. 【CSS3进阶】酷炫的3D旋转透视

    之前学习 react+webpack ,偶然路过 webpack 官网 ,看到顶部的 LOGO ,就很感兴趣. 最近觉得自己 CSS3 过于薄弱,想着深入学习一番,遂以这个 LOGO 为切入口,好好研 ...

  9. 3D旋转菜单

    今天来个3D旋转菜单,是纯css3实现的,主要用到transform,transition,backface-visibility. 主要是transform这个变换,它是今天猪脚. transfor ...

随机推荐

  1. 节点的创建--对比jQuery与JavaScript 方法

    一.  创建节点: 节点是DOM结构的基础,根据DOM规范,节点是一个很宽泛的概念,包含元素.属性.文本.文档和注释.但在实际开发中,要动态创建内容,主要操作的节点包括元素.属性和文本. 1.需求:创 ...

  2. 淘宝可以传照片搜索商品,verygood.雅客VC多味水果糖

    奶奶喜欢吃点硬糖.在当地买了些说是不好.到是一个亲戚买的一种糖比较满意(好久了都快融化了). 但是我只有照片,能知道品牌,在jd没这样一样的商品了. 还好借助淘宝的传照片功能,找到了.

  3. Codevs 1689 建造高塔

    1689 建造高塔 时间限制: 1 s 空间限制: 128000 KB 题目等级 : **钻石 Diamond** 题目描述 Description n有n种石块,石块能无限供应.每种石块都是长方体, ...

  4. Library string Type

    The string type supports variable-length character strings.The library takes cares of managing memor ...

  5. MVC的发展

    ASP.NET下的MVC从原始的1.0走到2.0,再到3.0,现在走到4.0,也许明年5.0就问世了,先不管那些,那说说这些MVC在ASP.NET是如何变化发展的.对于.net编程人员来说可能会很熟悉 ...

  6. CentOS安装+配置+远程

    这篇博客我之前写在了csdn,转了过来,这篇是自己认为写的比较有技术含量的文章^_^ 最近和CentOS打了交到,其中遇到了很多问题,于是看了一些博客,解决了一些问题,但是都不是特别全面,所以想来一篇 ...

  7. Lambda Expression In Java

     题记在阅读JDK源码java.util.Collections的时候在UnmodifiableCollection类中看到了这么一段代码: public void forEach(Consumer& ...

  8. dom 笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. php 接口 implements 使用

    主要对类名,类所拥有的方法,以及所传参数起约束和规范做用,感觉跟php abstract 抽象类又有点像. 一,接口的定义和调用 <?php interface face1 { const pa ...

  10. NSString NSMutableString copy mutableCopy retain weak strong整合

    copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...