2020-12-09 16:38发布
public void SetFromToRotion(Vector3 fromDirection,Vector3 toDirection);
可以创建一个从formDirection到toDirection的Quaternion实例。
Quaternion q = Quaternion.identity; q.SetFromToRotation(v1,v2); transform.rotation = q;
可以将GameObject对象进行如下变换:首先将GameObject对象自身坐标系的x,y,z轴方向和世界坐标系的x,y,z轴方向一致,然后将GameObject对象自身坐标系中向量V1指向的方向旋转到V2方向。
using UnityEngine;using System.Collections;public class SetFromToDirection_ts : MonoBehaviour { public Transform A, B, C; Quaternion q = Quaternion.identity; // Use this for initialization void Start () { } // Update is called once per frame void Update () { q.SetFromToRotation(A.position, B.position); C.rotation = q; Debug.DrawLine(Vector3.zero, A.position, Color.red); Debug.DrawLine(Vector3.zero, B.position, Color.green); Debug.DrawLine(C.position, C.position + new Vector3(0.0f, 1.0f, 0.0f), Color.black); Debug.DrawLine(C.position, C.TransformPoint(Vector3.up * 1.5f), Color.yellow); } }
运行结果如下图所示:
1.初始化物体旋转角度为0
Instantiate(ObjectPrefab, transform.position, Quaternion.identity);
2. 初始化物体带有旋转角度
Instantiate(ObjectPrefab, Vector3.zero, Quaternion.Euler(0, 35, 0));
3.物体始终转向目标物体
Vector3 directionToFace = _sphere.position - transform.position; //先算出与目标物体之间的位移差Debug.DrawRay(transform.position, directionToFace, Color.green); //画出射线,可以很明显地看出与目标物体之间的关系transform.rotation = Quaternion.LookRotation(directionToFace); //使用LookRotation让物体朝向目标体
4.物体缓慢转向目标物体
Vector3 directionToFace = _sphere.position - transform.position; Debug.DrawRay(transform.position, directionToFace, Color.green);Quaternion targetRotation = Quaternion.LookRotation(directionToFace); //先将旋转值保存出来
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime); //使用Slerp将旋转值以一定时间实现
Quaternion是四元数类,主要用来负责物体的旋转的,常用的属性有identity,表示物体没有旋转,常用方法有:LookRotation(得到要旋转到目标的角度值),Lerp(物体由快到慢的旋转到目标角度),Eular(把向量转成四元数)
旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。
那么,四元数又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢?
在Unity里,tranform组件有一个变量名为rotation,它的类型就是四元数。很多初学者会直接取rotation的x、y、z,认为它们分别对应了Transform面板里R的各个分量。当然很快我们就会发现这是完全不对的。实际上,四元数的x、y、z和R的那三个值从直观上来讲没什么关系,当然会存在一个表达式可以转换,
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学 学学js flash as等等 有个梯度就好多了如果要用好unity 不会编程那是不行的 学习的过程中都有个头疼的过程 记住 头越痛 代表你要接受的东西越多 坚持 你的大脑在和知识兼容中:D...
可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...
可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...
Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...
文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...
学习新知识的时候,首先要了解这个东西最基本的知识点,打好基础很重要,今天要和大家介绍的是Unity中最基本的也是最常用的一个类——Quaternion(四元数),会把Quaternion类中的所有函数基本都介绍下,希望可以帮到大家。1、Angle函数public static float...
Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念。四元数的乘法不符合交换律。从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一个四维...
最多设置5个标签!
话不多说,上代码!
Quaternion类实例方法
1、SetFromToRotation方法-创建rotation实例
1.1 函数原型
可以创建一个从formDirection到toDirection的Quaternion实例。
可以将GameObject对象进行如下变换:首先将GameObject对象自身坐标系的x,y,z轴方向和世界坐标系的x,y,z轴方向一致,然后将GameObject对象自身坐标系中向量V1指向的方向旋转到V2方向。
1.2 PS:不可以直接使用transform.rotation.SetFromToRotation(v1,v2)方式进行设置,只能将实例化的Quaternion复制给transform.rotation。
1.3 实例演示
运行结果如下图所示:
1.初始化物体旋转角度为0
Instantiate(ObjectPrefab, transform.position, Quaternion.identity);
2. 初始化物体带有旋转角度
Instantiate(ObjectPrefab, Vector3.zero, Quaternion.Euler(0, 35, 0));
3.物体始终转向目标物体
Vector3 directionToFace = _sphere.position - transform.position; //先算出与目标物体之间的位移差
Debug.DrawRay(transform.position, directionToFace, Color.green); //画出射线,可以很明显地看出与目标物体之间的关系
transform.rotation = Quaternion.LookRotation(directionToFace); //使用LookRotation让物体朝向目标体
4.物体缓慢转向目标物体
Vector3 directionToFace = _sphere.position - transform.position;
Debug.DrawRay(transform.position, directionToFace, Color.green);
Quaternion targetRotation = Quaternion.LookRotation(directionToFace); //先将旋转值保存出来
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime); //使用Slerp将旋转值以一定时间实现
Vector3 directionToFace = _sphere.position - transform.position;
Debug.DrawRay(transform.position, directionToFace, Color.green);
Quaternion targetRotation = Quaternion.LookRotation(directionToFace); //先将旋转值保存出来
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime); //使用Slerp将旋转值以一定时间实现
Quaternion是四元数类,主要用来负责物体的旋转的,常用的属性有identity,表示物体没有旋转,常用方法有:LookRotation(得到要旋转到目标的角度值),Lerp(物体由快到慢的旋转到目标角度),Eular(把向量转成四元数)
旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。
那么,四元数又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢?
在Unity里,tranform组件有一个变量名为rotation,它的类型就是四元数。很多初学者会直接取rotation的x、y、z,认为它们分别对应了Transform面板里R的各个分量。当然很快我们就会发现这是完全不对的。实际上,四元数的x、y、z和R的那三个值从直观上来讲没什么关系,当然会存在一个表达式可以转换,
相关问题推荐
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学 学学js flash as等等 有个梯度就好多了如果要用好unity 不会编程那是不行的 学习的过程中都有个头疼的过程 记住 头越痛 代表你要接受的东西越多 坚持 你的大脑在和知识兼容中:D...
可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...
可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...
Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...
文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...
学习新知识的时候,首先要了解这个东西最基本的知识点,打好基础很重要,今天要和大家介绍的是Unity中最基本的也是最常用的一个类——Quaternion(四元数),会把Quaternion类中的所有函数基本都介绍下,希望可以帮到大家。1、Angle函数public static float...
Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念。四元数的乘法不符合交换律。从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一个四维...