2020-12-03 10:26发布
把物体向translation方向移动,距离为translation.magnitude。 relativeTo表示这个移动的参考坐标系。
同上
如果relativeTo 不是null,则以目标物体relativeTo的自身轴向作为参考坐标系。
这个就是U3D所 封装的矩阵运算了,用于缩放,平移,还有定位(这个囧,他把矩阵给放这用了,所有物体都可以用transform类型来存放)。Transform所 实现的功能不过就是物体矩阵的运算罢了,具体如下:
Variables
position Vector3类型,物体位置,相对于世界坐标系的值。就是矩阵的最后一行的值。
localPosition Vector3类型,物体相对于父元素的位置.
eulerAngles Vector3类型,旋转后的欧拉角相对世界坐标的值。简单理解为各向量坐标所转动的值就好了。
localEulerAngles Vector3类型,相对父元素的欧拉角。
right Vector3类型,表示x轴(U3里红色的轴)方向的单位向量。
up Vector3类型,表示y轴(U3里绿色的轴)方向的单位向量。
forward Vector3类型,表示z轴(U3里蓝色的轴)方向的单位向量。
rotation Quaternion类型(quatermion就是个四维数,比vector3多一个w变量表示旋转角度的),世界坐标旋转。.
localRotation Quaternion类型,本地坐标的旋转度数(相对父元素)。
localScale Vector3类型,相对本地坐标系缩放(就是矩阵的乘法)
parent Transform类型,他的父元素。
worldToLocalMatrix Matrix4*4类型,把一个点从世界坐标系的位置转换为本地坐标系位置。(终究得用矩阵,哈哈)只读
localToWorldMatrix Matrix4*4类型,把一个点从本地坐标系转换为世界坐标系。(只读)
root Transform类型,返回最上层的那个Transform,就是他父亲的父亲的父亲的。。。(如果有的话)
childCount int型,你子元素的数量。。。
lossyScale Vector3类型,相对世界坐标系缩放。
这里所说的tansform不是类UnityEngine命名空间下的Transform,而是transform.
Transform 是Unity中最常用的类了。
其类的代码如下,代码贴出来太长也不是要说的重点:
我们所说的是常用的还有对象组件自身的transform,他里面包含了位置,旋转,缩放参数。
在常用组件Compnent的代码中:
注意这个东西是属性,有get,没有set.
当然命名空间仍旧为UnityEngine。
二、transform用法及其原因
我们先来看看,这个WrapperlessIcall ,它是unity中一个属性字段,他有什么用呢?
WrapperlessIcall 内部实现,非公开方法。
大家来看看如下代码:
看起来稀松平常,波澜不惊,但是下面水还是蛮深的。
使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。
this.transform并不是变量,而是一个get/set属性(property)
他是一个C++写的代码,在Mono中被调用。调用是intenal method的调用,其效率本身不是高。
比如,transform 经常需要保存在本地,然后在使用。
n
值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。
三、新的版本会不会做了优化呢?
个人觉得这个是之前的unity版本的东西,可能效率和性能没有做优化。
WrapperlessIcall][MethodImpl(MethodImplOptions.InternalCall)]
1
2
就这些属性来说,有的是直接调用C++代码,有的则是调用.net的内部函数到Unity中。
对于新的版本是不是有的优化处理呢,自己做了测试:
先看看现在Compnent的代码:
效率有手动cache (4ms)>>transform(20ms)>>this.tranform(22ms)>> GetComponent()(54ms)
但是原来的测试结果为:
1000000 次的Iterations
GetComponent=619ms
Monobehaviour = 60ms
CachedMB = 8ms
Manual Cache = 3ms
看来这其中还是有奥秘的。
我电脑配置目前还算可以,win7 64 位,I7-3770 + 960显卡+ 16G内存。
结果对比,相对与之前2012年Unity版本,可能mono做了很大的优化,当然我们的电脑可能还是不一样,没有办法直接做对比,也只能猜测而已。
但是结论还是一样的:
在以后的使用中,若大量使用,还是需把transform给手动保存下来吧。
说明:
代码做了修改:
原来的代码中有这些:
四、强制拔高啦!!
我还想努力一把!!
让别人可以直接用,但是有不修改原有代码:
怎么办呢?
既然大家都要继承monobehaviour,那我就在他上面想办法。
4.1 方法一,实现一个扩展方法:
但是这个扩展方法,必须静态的,所以没有办法做一个静态的临时变量啊,这个不靠谱啊。
若写成上面的代码效率并没有太多提高。每次还是需要赋值。
所以这个路走不通啊!!
来看方法二吧。
4.2 方法二,乾坤大挪移,重新命名类
UnityMonoBehaviour 这个是啥呢?哈哈
看using UnityMonoBehaviour = UnityEngine.MonoBehaviour;
我们来看看结果:
直接使用tranform 和this.tranform花费时间为9ms,比上面的20多ms,那是降低了很多。
但是,这个是结论啊,还是没有手动缓存的效果高啊,依旧为4ms。
作者:LunarShade链接:https://www.jianshu.com/p/b9de65aebf3d来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在脚本里面使用transform对象,运用点运算符,调用Transform类里面的相关属性和方法,即可以实现物体的移动,旋转和缩放功能.
U3D所 封装的矩阵运算了,用于缩放,平移,还有定位(这个囧,他把矩阵给放这用了,所有物体都可以用transform类型来存放)。Transform所 实现的功能不过就是物体矩阵的运算罢了
Transform上面主要封装了物体的位置,朝向,大小属性
Transform类中包含了一些重要的属性,比如,position rotation scale等
一般我们可以通过代码获取某个物体身上得Transform进行操作它,与之对比的还有小写的transform
区别:一个是类,一个是属性
none:定义不进行转换。matrix(n,n,n,n,n,n):定义 2D 转换,使用六个值的矩阵。matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) 定义 3D 转换,使用 16 个值的 4x4 矩阵。translate(x,y):定义 2D 转换。translate3d(x,y,z):定义 3D 转换。translateX(x):定义转换,只是用 X 轴的值。translateY(y):定义转换,只是用 Y 轴的值。translateZ(z):定义 3D 转换,只是用 Z 轴的值。scale(x,y):定义 2D 缩放转换。scale3d(x,y,z):定义 3D 缩放转换。scaleX(x):通过设置 X 轴的值来定义缩放转换。scaleY(y):通过设置 Y 轴的值来定义缩放转换。scaleZ(z):通过设置 Z 轴的值来定义 3D 缩放转换。rotate(angle):定义 2D 旋转,在参数中规定角度。rotate3d(x,y,z,angle):定义 3D 旋转。rotateX(angle):定义沿着 X 轴的 3D 旋转。rotateY(angle):定义沿着 Y 轴的 3D 旋转。rotateZ(angle):定义沿着 Z 轴的 3D 旋转。skew(x-angle,y-angle):定义沿着 X 和 Y 轴的 2D 倾斜转换。skewX(angle):定义沿着 X 轴的 2D 倾斜转换。skewY(angle):定义沿着 Y 轴的 2D 倾斜转换。perspective(n):为 3D 转换元素定义透视视图。
Transform类是Unity脚本编辑的一个基础且重要的类一、成员变量position:在世界空间坐标transform的位置。localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。eulerAngles:世界坐标系中的旋转(欧拉角)。localEule...
MatrixTransform:创建一个用于操纵二维屏幕中的对象或者坐标系统的专用转换矩阵RotateTransform:围绕二维(x,y)坐标系统中一个指定点顺时针方向旋转对象ScaleTransform:调整对象在二维(x,y)坐标系统中的尺寸SkewTransform:在二维(x,y)坐标系统中倾斜对象Tr...
Text作为UGUI最基础的控件以及最常用的控件,它在项目中的应用绝对可以算是最多的,任何一个UI界面可以说都离不开它,它的基本属性如下:一、rect transform组件:rect transform(矩形变换):理解为专门用于UI的transform组件,是UGUI所有控件的标准位置变...
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从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)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...
最多设置5个标签!
public void Translate (translation : Vector3, relativeTo : Space = Space.Self) : void
把物体向translation方向移动,距离为translation.magnitude。 relativeTo表示这个移动的参考坐标系。
public void Translate (x : float, y : float, z : float, relativeTo : Space = Space.Self) : void
同上
public void Translate (translation : Vector3, relativeTo : Transform) : void
如果relativeTo 不是null,则以目标物体relativeTo的自身轴向作为参考坐标系。
public void Translate (x : float, y : float, z : float, relativeTo : Transform) : void
这个就是U3D所 封装的矩阵运算了,用于缩放,平移,还有定位(这个囧,他把矩阵给放这用了,所有物体都可以用transform类型来存放)。Transform所 实现的功能不过就是物体矩阵的运算罢了,具体如下:
Variables
position Vector3类型,物体位置,相对于世界坐标系的值。就是矩阵的最后一行的值。
localPosition Vector3类型,物体相对于父元素的位置.
eulerAngles Vector3类型,旋转后的欧拉角相对世界坐标的值。简单理解为各向量坐标所转动的值就好了。
localEulerAngles Vector3类型,相对父元素的欧拉角。
right Vector3类型,表示x轴(U3里红色的轴)方向的单位向量。
up Vector3类型,表示y轴(U3里绿色的轴)方向的单位向量。
forward Vector3类型,表示z轴(U3里蓝色的轴)方向的单位向量。
rotation Quaternion类型(quatermion就是个四维数,比vector3多一个w变量表示旋转角度的),世界坐标旋转。.
localRotation Quaternion类型,本地坐标的旋转度数(相对父元素)。
localScale Vector3类型,相对本地坐标系缩放(就是矩阵的乘法)
parent Transform类型,他的父元素。
worldToLocalMatrix Matrix4*4类型,把一个点从世界坐标系的位置转换为本地坐标系位置。(终究得用矩阵,哈哈)只读
localToWorldMatrix Matrix4*4类型,把一个点从本地坐标系转换为世界坐标系。(只读)
root Transform类型,返回最上层的那个Transform,就是他父亲的父亲的父亲的。。。(如果有的话)
childCount int型,你子元素的数量。。。
lossyScale Vector3类型,相对世界坐标系缩放。
这里所说的tansform不是类UnityEngine命名空间下的Transform,而是transform.
Transform 是Unity中最常用的类了。
其类的代码如下,代码贴出来太长也不是要说的重点:
我们所说的是常用的还有对象组件自身的transform,他里面包含了位置,旋转,缩放参数。
在常用组件Compnent的代码中:
注意这个东西是属性,有get,没有set.
当然命名空间仍旧为UnityEngine。
二、transform用法及其原因
我们先来看看,这个WrapperlessIcall ,它是unity中一个属性字段,他有什么用呢?
WrapperlessIcall 内部实现,非公开方法。
大家来看看如下代码:
看起来稀松平常,波澜不惊,但是下面水还是蛮深的。
使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。
this.transform并不是变量,而是一个get/set属性(property)
他是一个C++写的代码,在Mono中被调用。调用是intenal method的调用,其效率本身不是高。
比如,transform 经常需要保存在本地,然后在使用。
n
值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。
三、新的版本会不会做了优化呢?
个人觉得这个是之前的unity版本的东西,可能效率和性能没有做优化。
WrapperlessIcall][MethodImpl(MethodImplOptions.InternalCall)]
1
2
就这些属性来说,有的是直接调用C++代码,有的则是调用.net的内部函数到Unity中。
对于新的版本是不是有的优化处理呢,自己做了测试:
先看看现在Compnent的代码:
效率有手动cache (4ms)>>transform(20ms)>>this.tranform(22ms)>> GetComponent()(54ms)
但是原来的测试结果为:
1000000 次的Iterations
GetComponent=619ms
Monobehaviour = 60ms
CachedMB = 8ms
Manual Cache = 3ms
看来这其中还是有奥秘的。
我电脑配置目前还算可以,win7 64 位,I7-3770 + 960显卡+ 16G内存。
结果对比,相对与之前2012年Unity版本,可能mono做了很大的优化,当然我们的电脑可能还是不一样,没有办法直接做对比,也只能猜测而已。
但是结论还是一样的:
在以后的使用中,若大量使用,还是需把transform给手动保存下来吧。
说明:
代码做了修改:
原来的代码中有这些:
四、强制拔高啦!!
我还想努力一把!!
让别人可以直接用,但是有不修改原有代码:
怎么办呢?
既然大家都要继承monobehaviour,那我就在他上面想办法。
4.1 方法一,实现一个扩展方法:
但是这个扩展方法,必须静态的,所以没有办法做一个静态的临时变量啊,这个不靠谱啊。
若写成上面的代码效率并没有太多提高。每次还是需要赋值。
所以这个路走不通啊!!
来看方法二吧。
4.2 方法二,乾坤大挪移,重新命名类
UnityMonoBehaviour 这个是啥呢?哈哈
看using UnityMonoBehaviour = UnityEngine.MonoBehaviour;
我们来看看结果:
直接使用tranform 和this.tranform花费时间为9ms,比上面的20多ms,那是降低了很多。
但是,这个是结论啊,还是没有手动缓存的效果高啊,依旧为4ms。
作者:LunarShade
链接:https://www.jianshu.com/p/b9de65aebf3d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在脚本里面使用transform对象,运用点运算符,调用Transform类里面的相关属性和方法,即可以实现物体的移动,旋转和缩放功能.
U3D所 封装的矩阵运算了,用于缩放,平移,还有定位(这个囧,他把矩阵给放这用了,所有物体都可以用transform类型来存放)。Transform所 实现的功能不过就是物体矩阵的运算罢了
Transform上面主要封装了物体的位置,朝向,大小属性
Transform类中包含了一些重要的属性,比如,position rotation scale等
一般我们可以通过代码获取某个物体身上得Transform进行操作它,与之对比的还有小写的transform
区别:一个是类,一个是属性
none:定义不进行转换。
matrix(n,n,n,n,n,n):定义 2D 转换,使用六个值的矩阵。
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) 定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate(x,y):定义 2D 转换。
translate3d(x,y,z):定义 3D 转换。
translateX(x):定义转换,只是用 X 轴的值。
translateY(y):定义转换,只是用 Y 轴的值。
translateZ(z):定义 3D 转换,只是用 Z 轴的值。
scale(x,y):定义 2D 缩放转换。
scale3d(x,y,z):定义 3D 缩放转换。
scaleX(x):通过设置 X 轴的值来定义缩放转换。
scaleY(y):通过设置 Y 轴的值来定义缩放转换。
scaleZ(z):通过设置 Z 轴的值来定义 3D 缩放转换。
rotate(angle):定义 2D 旋转,在参数中规定角度。
rotate3d(x,y,z,angle):定义 3D 旋转。
rotateX(angle):定义沿着 X 轴的 3D 旋转。
rotateY(angle):定义沿着 Y 轴的 3D 旋转。
rotateZ(angle):定义沿着 Z 轴的 3D 旋转。
skew(x-angle,y-angle):定义沿着 X 和 Y 轴的 2D 倾斜转换。
skewX(angle):定义沿着 X 轴的 2D 倾斜转换。
skewY(angle):定义沿着 Y 轴的 2D 倾斜转换。
perspective(n):为 3D 转换元素定义透视视图。
相关问题推荐
Transform类是Unity脚本编辑的一个基础且重要的类一、成员变量position:在世界空间坐标transform的位置。localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。eulerAngles:世界坐标系中的旋转(欧拉角)。localEule...
MatrixTransform:创建一个用于操纵二维屏幕中的对象或者坐标系统的专用转换矩阵RotateTransform:围绕二维(x,y)坐标系统中一个指定点顺时针方向旋转对象ScaleTransform:调整对象在二维(x,y)坐标系统中的尺寸SkewTransform:在二维(x,y)坐标系统中倾斜对象Tr...
Text作为UGUI最基础的控件以及最常用的控件,它在项目中的应用绝对可以算是最多的,任何一个UI界面可以说都离不开它,它的基本属性如下:一、rect transform组件:rect transform(矩形变换):理解为专门用于UI的transform组件,是UGUI所有控件的标准位置变...
还是要学好编程基础呀如果你觉得编程很苦难 不一定要从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)=...
策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样! 游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...
可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。
游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...