创建一个gameObject空物体,把它拖到(10,0,0)位置,再空物体内建一个子物体,坐标为(0,0,0),那么这个子物体的全局坐标是(10,0,0)但对于父物体而言相对坐标是(0,0,0)
Unity的工作方向
游戏开发:Unity本身就是游戏引擎,所以作为游戏开发的工具可以说是比较常见的。学Unity并不是学Unity本身、我们要掌握的是Unity引擎的本质内容。像是其中的C#编程语言、语言的基本语法。还有一些Unity引擎相关的知识:如何搭建一个项目,然后怎么调用Unity中的功能来实现自己的要求,根据需求决定该怎么做,等等。
游戏策划:对游戏类型和玩家有基本了解,能够通掌握任意一款游戏的玩法结构拆解,同时掌握游戏的核心玩法、了解游戏活动文案的编写技巧以及文案策划的特点对主策划的工作内容有所了解,熟知商业项目的应用模式和一些既有原型的参考案例、对已上线游戏的修改方案进行实战演练等,对于一些基础语言和引擎知识掌握得不太好的人来说,从事游戏策划的工作也是一种选择
VR/AR:Unity的应用不止游戏方向,学好相关知识,也可以从事VR/AR方向的工作。另外一些例如垂直功能:视觉结构,教育,军事仿真等。在开发上,Unity都十分迎合广大用户的需求。
该如何选择
从以上信息来看,Unity的工作方向不止游戏这么简单。未来Unity就业前景是非常的可观的。想要在这个行业分得一杯羹的话,那么还是需要有过硬的技术才可以的。相信很多小伙伴都是想做游戏才学习Unity的。至于选择什么样的方向,要结合自己的兴趣和能力综合考察和判断。
GameObject是unity所有实体的基类
常用的函数
1GameObjectFind(“Cube”);
可以查找并获取一个指定的name为Cube的对象。然后进行其他 *** 作。
2GameObjectFindWithTag(“_cube");
和Find函数相似,不同之处在于该方法是通过标签(tag)值查找
3GameObjectSetActive(true);
激活/停用此游戏对象(如下图11所示打钩(true)的时候该游戏对象就属于激活状态,去掉打钩(false)就属于停用状态即游戏对象也就不会显示在你的视野内)
4GameObjectGetComponent
获取组件:如果这个游戏对象附件了一个type名称类型的组件,则返回该组件,否则为空。
hinge=gameObjectGetComponent("HingeJoint")asHingeJoint;
hingeuseSpring=false;
是一个每个对象都用的组件,用于储存并 *** 控物体的位置、旋转和缩放。(每一个Transform可以有一个父级,允许你分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。他们也支持计数器(enumerator),因此你可以使用循环遍历子对象。)
1transformFind
是通过名字查找到子对象并返回他。
2TransformTranslate 平移
向莫一个方向进行移动多少的距离
移动变换由x沿着x轴,y沿着y轴,z沿着z轴
transformTranslate(0,0, TimedeltaTime);
transformTranslate(0, TimedeltaTime,0, SpaceWorld);
3Transformparent
通过该方法可以找到父对象,然后可以进行对父对象 *** 作(如改变父对象名字)
_childgameObjecttransformparentgameObjectname = "ParentBox";
4Transformroot
返回最根部父类进行 *** 作
string name=_childgameObjecttransformrootgameObjectname;
DebugLog(name);
5Transformposition
在世界坐标系中transform的·位置
6Transformrotation
Unity以四元数储存旋转角度。要旋转一个对象使用TransformRotate,使用TransformeulerAngles以欧拉角设置旋转角度。
7TransformlocalScale
相对于父级对象进行缩放(局部缩放)
transformlocalScale = new Vector3(05f,05f, 05f);
(为=时是对该物体进行缩小到后面参数的大小,+=时是对该物体进行放大)
8Transformforward
向前在世界空间坐标,变换的蓝色轴。也就是z轴。
在世界空间坐标,变换的蓝色轴。也就是z轴。
以前理解不到位,写的不清楚,现在重新理了一下。
每个矩形组件都有锚点和重心点。
对象拥有锚点, 但是锚点的位置是对于父对象而言的 ,如下图,父对象是画布,子对象是。举两个栗子就能看清这两者的关系。
不同于锚点, 重心点的位置是相对于对象本身而言的 ,举三个栗子。
width, height : 显而易见是矩形的长宽
Pos X , Pos Y :以锚点为原点,向右、上为正方向的坐标系里,重心点的位置 ,举个两个栗子:
锚框: 四个小雪花不在一起,会组成一个锚框。
Top bottom left right = 矩形组件四边 相对于 锚框四边 的距离
举一个栗子:
猜测:RectTransform类的rect属性决定了RectTransform的绘制,以重心点为原点,向左和向下确定子对象矩形边的位置
1 anchoredPosition属性
① 小雪花在一起时,以锚点为原点,求重心点的相对坐标
②小雪花不在一起时,以右上角的小锚点为原点,求重心点的相对坐标
2 offsetMin属性 以左下角的小锚点为原点 求矩形组件左下角的相对坐标
3 offsetMax属性 以右上角的小锚点为原点 求矩形组件右上角的相对坐标
4 sizeDelta属性 (尺寸变化量)
① 小雪花在一起时,就是矩形组件的长宽;
②小雪花不在一起时,等于 矩形长宽 相对于 锚框长宽 的变化量:
(矩形X轴长度-锚框X轴长度,矩形Y轴长度-锚框Y轴长度)
这东西在API里面有详细解释的
基本语法: public Vector3 velocity{get;set;}
功能说明: 此属性用于设置或返回刚体的速度值,其使用说明如下。
1、在脚本中无论是给刚体赋予一个Vector3类型的速度向量v,还是获取当前刚体的速度v,v的方向都是相对世界坐标系而言的。
2、velocity的单位是米每秒,而不是帧每秒,其中米是Unity默认的长度单位。
实例演示: 下面通过演示属性velocity的使用。
using UnityEngine;
using SystemCollections;
public class Velocity_ts:MonoBehaviour
{
public Rigibody r1,r2;
void start()
{
r1velocity=new Vector3(00f,00f,-150f);
r2velocity=new Vector3(00f,00f,100f);
}
void OnGUI()
{
GUILabel(new Rect(100f,80f,3000f,400f),"R1当前速度:"+r1velocity);
GUILabel(new Rect(100f,580f,3000f,400f),"R2当前速度:"+r2velocity);
DebugLog("R1当前速度:"+r1velocity);
DebugLog("R2当前速度:"+r2velocity);
}
}
首先要熟悉一些基本的力学名词及相关公式
刚体(Rigidbody) :刚体是指在运动中和受到力的作用后,形状和大小不变,而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的,刚体是力学中的一个科学抽象概念,即理想模型。
力(F) :力是物体对物体的作用,力不能脱离物体而单独存在。Unity的物理引擎就是以此为基础构建的。
重力(G) :物体由于地球的吸引而受到的力叫重力。重力的施力物体是地心。Unity中的重力与其相似。重力的方向总是竖直向下。
摩擦力 :在Unity中分为滑动摩擦力和静摩擦力。通常通过设置动摩擦系数和静摩擦系数来控制物体的运动。(滚动摩擦一般不用)
d力 :在Unity中物体受外力后产生与其相反方向的力。通常通过设置d性系数来
使物体获得d性属性。
扭矩力 :使物体发生转动的力。
阻尼 :当物体受到外力作用而振动时,会产生一种使外力衰减的反力,称为阻尼力(或减震力) 。
重力加速度 (单位:m/s^2): g = 981 (在Unity中)
重力 (单位:N): G = mg
滑动摩擦力 (单位:N): F = μ×FN (FN:正压力,μ:动摩擦因数)
单摆周期公式 (单位:s): T = 2π√(L/g)(L:摆长)
力矩 (单位:N×m): M = FL (L:摆动轴)
物体要受力的影响就需要添加Rigibody组件。(基本上能动的物体都需要Rigibody组件)物体添加Rigibody组件后,可以接受外力和扭矩力,并一直受到重力影响,
选中一个物体后,为其添加Rigibody组件。
Mass(质量) :用于设置游戏对象的质量。(一般在同一游戏场景中,游戏对象之间的质量差不大于100倍)
Drag(阻力) :即游戏对象受力运动时受到的空气阻力,阻力极大时,游戏对象会立即停止运动。
Angular Drag(角阻力) :即游戏对象受扭矩力旋转时受到的空气阻力。同样的,阻力极大时,游戏对象会立即停止旋转。
Use Gravity(使用重力) :即开启此项时,游戏对象会受到重力的影响。
Is Kinematic(是否开启动力学) :即开启此项时,游戏对象将不再受到物理引擎的影响,从而只能通过Transform属性来对其 *** 作。(该方式适用于模拟平台的移动或带有铰链关节链接刚体的动画)
Interpolate(插值) :用于控制刚体运动的抖动情况。
None:没有插值。
Interpolate:内插值。基于前一帧的Transform平滑此次的Transform。
Extrapolate:外插值。基于下一帧的Transform平滑此次的Transform。
Collision Detection(碰撞检测) :该属性用于控制避免高速运动的游戏对象穿过其它对象而未发生碰撞。
Discrete:离散碰撞检测。该模式与场景中其它的所有碰撞体进行碰撞检测。该值为默认值。
Continuous:连续碰撞检测。该模式用于检测与动态碰撞体(带有Rigidbody)碰撞,使用连续碰撞检测模式来检测与网格碰撞体的(不带Rigidbody)碰撞。其它的刚体会采用离散碰撞模式。此模式适用于那些需要采用连续动态碰撞检测的对象相碰撞的对象。这对物理性能会有很大的影响,如果不需要对快速运动的对象进行碰撞检测,不建议使用此模式,建议使用离散碰撞检测模式。
Continuous Dynamic:连续动态碰撞检测。该模式用于检测与采用连续碰撞模式或连续动态碰撞模式对象的碰撞,也可以用于检测没有Rigidbody的静态网格碰撞体。对于与之碰撞的其它对象可采用离散碰撞检测。该模式也可以用于检测快速运动的游戏对象。
Constraints(约束) :该项用于控制对于刚体运动的约束。
Freeze Position:冻结位置。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的移动将无效。
Freeze Rotation:冻结旋转。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的旋转将无效。
Constant Force用来为刚体添加恒力。适用于类似火箭发射的对象,因为F=ma,使得这类对象的速度不断提升。
选中一个物体后,为其添加Constant Force组件。
四种属性均用三维向量表示,坐标轴表示方向,数值表示大小。
需要注意的是:添加恒力(Constant Force)组件时,系统会默认添加刚体(Rigidbody)组件。
添加恒力组件后,不能移除刚体组件。
Force(力) :设置世界坐标系中使用的扭矩力。
Relative Force(相对力) :设置在物体局部坐标系中使用的力。
Torque(扭矩) :设置在世界坐标系中使用的扭矩力。游戏对象依据该向量进行转动。(向量越长转动越快)
Relative Torque(相对扭矩) :相对扭矩。设置在物体局部坐标系中使用的扭矩力。。游戏对象依据该向量进行转动。(向量越长转动越快)
Character Controller主要用于第三人称或第一人称游戏主角的控制。不使用刚体物理效果。(Character Controller可通过物理效果影响其他的对象,但无法通过物理效果被其他的对象影响)
选中一个物体后,为其添加Character Controller组件。
Slope Limit(坡度限制) :设置所控制的游戏对象只能爬上角度小于或等于该参数值的斜坡倾角。
Step Offset(台阶高度) :设置所控制的游戏对象可以迈上的最高台阶的高度。
Skin Width(皮肤厚度) :该参数决定了两个碰撞体可以相互参入的深度。
较大的参数值会产生抖动的现象,较小的参数值会导致所控制的游戏对象被卡住,较为合理的设置是该参数值为Radius值的10%。
Min Move Distance(最小移动距离) :如果所控制的游戏对象的移动距离小于该值,则游戏对象将不会移动,这样可避免抖动,大多数情况下将该值设为0。
Center(中心) :该参数决定了胶囊碰撞体与所控制的游戏对象的相对位置,并不影响所控制的角色对象的中心坐标
Radius(半径) :胶囊体碰撞的长度半径,同时该项也决定了碰撞体的半径。
Height(高度) :用于设置所控制的角色对象的胶囊体碰撞体的高度。
Collider要与Rigibody一起添加到游戏对象上才能触发碰撞。
两个刚体撞在一起时,拥有碰撞体的对象才会计算碰撞。
都没有碰撞体的两个刚体会彼此穿过,不会发生碰撞。
添加Collider组件方法
一般创建一个游戏对象时会自动添加相应的碰撞体。
该碰撞体可调整为不同大小的长方体。
可用作门、墙、平台,也可用于布娃娃的角色躯干或汽车等交通工具的外壳上。
该碰撞体的三维大小可以均匀地调节,但不能单独调节某个坐标轴方向的大小。
可用作落石、球类等游戏对象。
该碰撞体的高度和半径可单独调节。
可用作角色控制器或与其他不规则形状的碰撞结合使用。(Uinty中角色控制器中通常内嵌了胶囊碰撞体)
该碰撞体通过获取网格对象并在其基础上构建碰撞。
与在复杂的网络模型上使用基本碰撞体相比,网格碰撞体要更加精细,但会占用更多的系统资源。(开启Convex参数的网格碰撞体才可以与其他的网格碰撞体发生碰撞)
该碰撞体是基于地形构建的碰撞体。
车轮碰撞体是一种针对地面车辆的特殊碰撞体,它有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。
除了车轮,该碰撞体也可用于其他的游戏对象。
关节是模拟物体与物体之间的一种连接关系,关节必须依赖于刚体组件。
关节组件可以添加到多个游戏对象中,关节又分为3D类型的关节和2D类型的关节。(本篇讲述3D关节)
添加Joint组件方法
由两个刚体组成,使它们像被连接在一个铰链上那样运动。
它非常适用于对门的模拟,也可用作模型链及钟摆等物体。
需要注意的是:添加关节(Join)组件时,系统会默认添加刚体(Rigidbody)组件。
添加关节组件后,不能移除刚体组件。
Connected Body(连接刚体) :为关节指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点) :刚体可围绕锚点进行摆动。该值应用于局部坐标系。
Axis(轴) :定义刚体摆动的方向。该值应用于局部坐标系。
Auto Configure Connected Anchor(自动设置连接锚点) :勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点) :自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Use Spring(使用d簧) :勾选该项,d簧会使刚体与其连接的主体形成一个特定的角度
Spring(d簧) :当Use Spring参数开启时,此属性有效。
Spring:d簧力。设置推动对象使其移动到相应位置的作用力。
Damper:阻尼。设置对象的阻尼值,数值越大则对象移动得越缓慢。
Target Position:目标角度。设置d簧的目标角度,d簧会拉向此角度。
Use Motor(使用发动机) :勾选该项,发动机会使对象发生旋转。
Motor(发动机) :当Use Motor参数开启时,此属性有效。
Target Velocity:目标速度。设置对象预期将要达到的速度值。
Force:作用力。设置为了达到目的速度而施加的作用力。
Free Spin:自动转动。勾选该项,则发动机永远不会停止,旋转只会越转越快。
Use Limits(使用限制) :勾选该项,铰链的角度将被限定在最大值和最小值之间。
Limits(限制) :当Use Limits参数开启时,此属性有效。
Min:最小值。设置铰链能达到的最小角度。
Max:最大值。设置铰链能达到的最大角度。
Min Bounce:最小反d。设置当对象触到最小限制时的反d值。
Max Bounce:最大反d。设置当对象触到最大限制时的反d值。
Contact Distance:接触距离。控制关节的抖动。
Break Force(断开力) :设置铰链关节断开的作用力。
Break Torque(断开转矩) :设置断开铰链关节所需的转矩。
Enable Collision(激活碰撞) :勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理) :勾选该项,实现关节的稳定。(该项默认为开启状态)
固定关节用于约束一个游戏对象对另一个游戏对象的运动。类似于对象的父子关系,但它是通过物理系统来实现而不像父子关系那样是通过Transform属性来进行约束。(使用固定关节的对象自身需要有一个刚体组件)
适用于当希望将对象较容易与另一个对象分开时,或者连接两个没有父子关系的对象使其一起运动时。
Connected Body (连接刚体) :用于指定关节要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Break Force(断开力) :设置关节断开的作用力。
Break Torque(断开转矩) :设置断开关节所需的转矩。
Enable Collision(激活碰撞) :勾选此项,则关节之间也会检测碰撞。
Enable Preprocessing(启用预处理) :勾选该项,实现关节的稳定。(该项默认为开启状态)
d簧关节组件可将两个刚体连接在一起,使其像连接着d簧那样运动。
Connected Body(连接刚体) :用于为d簧指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点) :设置Joint在对象局部坐标系中的位置。(注意:不是对象将d向的点)
Auto Configure Connected Anchor(自动设置连接锚点) :勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点) :自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Spring(d簧) :设置d簧的强度,数值越高d簧的强度就越大。
Damper(阻尼) :设置d簧的阻尼系数,阻尼数值越大,d簧强度减小的幅度越大。
Min Distance(最小距离) :设置d簧启用的最小距离值。如果两个对象之间的当前距离与初始距离的差小于该值,则不会开启d簧。
Max Distance(最大距离) :设置d簧启用的最小距离值。如果两个对象之间的当前距离与初始距离的差大于该值,则不会开启d簧。
Break Force(断开力) :设置d簧关节断开所需的作用力。
Break Torque(断开转矩) :设置d簧关节断开所需的转矩力。
Enable Collision(激活碰撞) :勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理) :勾选该项,实现关节的稳定。(该项默认为开启状态)
角色关节主要用于表现布娃娃效果,它是扩展的球关节,可用于限制关节在不同旋转轴下的旋转角度。
Connected Body(连接刚体) :用于为角色关节指定要连接的刚体。(若不指定刚体,则该关节默认与世界相连)
Anchor(锚点) :设置游戏对象局部坐标系中的点,角色关节将按围绕该点进行旋转。
Axis(扭动轴) :设置角色关节的扭动轴。(以橙色的圆锥gizmo表示)
Auto Configure Connected Anchor(自动设置连接锚点) :勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点) :自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Swing Axis(摆动轴) :设置角色关节的摆动轴。(以绿色的圆锥gizmo表示)
Twist Limit Spring(d簧的扭曲限制)
Spring:设置角色关节扭曲的d簧强度。
Damper:设置角色关节扭曲的阻尼值。
Low Twist Limit(扭曲下限) :设置角色关节扭曲的下限。
Limit:设置角色关节扭曲的下限值。
Bounciness:设置角色关节扭曲下限的反d值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
High Twist Limit(扭曲上限) :设置角色关节扭曲的上限。
Limit:设置角色关节扭曲的上限值。
Bounciness:设置角色关节扭曲上限的反d值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Swing Limit Spring(d簧的摆动限制)
Spring:设置角色关节摆动的d簧强度。
Damper:设置角色关节摆动的阻尼值。
Swing 1,2 Limit(摆动限制1,2) :1与2的限制是对称的,即更改一个里面的三项属性即可。
Limit:设置角色关节摆动的限制值。
Bounciness:设置角色关节摆动限制的反d值。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Enable Projection(启动投影) :该项用于激活投影。
Projection Distance(投影距离) :设置当对象与其连接刚体的距离超过投影距离时,该对象会回到适当的位置。
Projection Angle(投影角度) :设置当对象与其连接刚体的角度超过投影角度时,该对象会回到适当的位置。
Break Force(断开力) :控制角色关节断开所需的作用力。
Break Torque(断开转矩) :设置角色关节断开所需的转矩。
Enable Collision(激活碰撞) :勾选该项,则关节之间也会检测碰撞。
Enable Preprocessing(启用预处理) :勾选该项,实现关节的稳定。(该项默认为开启状态)
可配置关节组件支持用户自定义关节,它开放了PhysX引擎中所有与关节相关的属性,因此可像其他类型的关节那样来创造各种行为。
可配置关节有两类主要的功能:移动/旋转限制和移动/旋转加速度。
connected boby(连接刚体) :用于为关节指定要连接的刚体。(若不指定则该关节将与世界相连接)
anchor(锚点) :设置关节的中心点,所有基于物理效果的模拟都会以此点为中心点来进行计算。
axis(主轴) :设置局部旋转轴,该轴决定了对象在物理模拟下自然旋转的方向。
Auto Configure Connected Anchor(自动设置连接锚点) :勾选该项,连接锚点会自动设置。(该项默认为开启状态)
Connected Anchor(连接锚点) :自动连接锚点项开启时,此项会自动设置。自动连接锚点项未开启时,可手动设置连接锚点。
Secondary Axis(副轴) :主轴和副轴共同决定了关节的局部坐标。第三个轴与这两个轴所构成的平面相垂直。
Xmotion(X轴移动) :设置游戏对象在X轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Ymotion(Y轴移动) :设置游戏对象在Y轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Zmotion(Z轴移动) :设置游戏对象在Z轴的移动形式,有自由移动(Free)、锁定移动(Locked)及限制性移动(Limited)。
Angular Xmotion(X轴旋转) :设置游戏对象围绕X轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Angular Ymotion(Y轴旋转) :设置游戏对象围绕Y轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Angular Zmotion(Z轴旋转) :设置游戏对象围绕Z轴的旋转形式,有自由旋转(Free)、锁定旋转(Locked)及限制性旋转(Limited)。
Linear Limit Spring(d簧线性限制)
Spring:d簧。设置将对象拉回边界的力。
Damper:阻尼。设置d簧的阻尼值。
Linear Limit(线性限制) :设置自关节原点的距离为基准对其运动边界加以限定。
Limit:限制。设置从原点到边界的距离。
Boundciness:反d。设置当对象到边界时施加给它的反d力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Angular X Limit Spring(X轴旋转限制)
Spring:d簧。设置将对象拉回边界的力。
Damper:阻尼。设置d簧的阻尼值。
Low Angular X Limit(X轴旋转下限) :以与关节初始旋转的差值为基础设置旋转约束下限的边界。
Limit:旋转的限制角度。设置对象旋转角度的下限值。
Bounciness:反d。设置当对象到边界时施加给它的反d力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
High Angular X Limit(X轴旋转上限) :以与关节初始旋转的差值为基础设置旋转约束上限的边界。
Limit:旋转的限制角度。设置对象旋转角度的上限值。
Bounciness:反d。设置当对象到边界时施加给它的反d力。
Contact Distance:设置用于为了避免抖动而限制的接触距离。
Angular YZ Limit Spring(Y轴和Z轴旋转限制)
属性参数同Angular X Limit Spring
Angular Y Limit (Y轴旋转限制)
属性参数同Angular X Limit
Angular Z Limit (Y轴旋转限制)
属性参数同Angular X Limit
Target Position(目标位置) :关节在X,Y,Z三个轴向上应达到的目标位置。
Target Velocity(目标速度) :关节在X,Y,Z三个轴向上应达到的目标速度。
XDrive(X轴驱动) :设置了对象沿局部坐标系X轴的运动形式。
Position Spring:位置d簧力。朝预定义方向上的皮筋的拉力。
Position Damper:位置阻尼。抵抗位置d簧力的力。
Maximum Force:最大作用力。推动对象朝预定方向运动的作用力的总和。
YDrive(Y轴驱动) :设置了对象沿局部坐标系Y轴的运动形式。
属性参数同XDrive
ZDrive(Z轴驱动) :设置了对象沿局部坐标系Z轴的运动形式。
属性参数同XDrive
Target Rotation(目标旋转) :目标旋转是一个四元数,它定义了关节应当旋转到的角度。
Target Angular Velocity(目标旋转角速度) :目标旋转角速度是一个三维向量,它定义了关节应当旋转到的角速度。
Rotation Drive Mode (旋转驱动模式) :通过X&YZ轴驱动或插值驱动来控制对象自身的旋转。
Angular X Drive (X轴角驱动) :设置了关节如何围绕X轴进行旋转。
Position Spring:位置d簧力。朝预定义方向上的皮筋的拉力。
Position Damper:位置阻尼。抵抗位置d簧力的力。
Maximum Force:最大作用力。推动对象朝预定方向运动的作用力的总和。
Angular YZ Drive (YZ轴角驱动) :设置了关节如何围绕自身的Y轴和Z轴进行旋转。
属性参数同Angular X Drive
Slerp Drive(差值驱动) :设置了关节如何围绕局部所有的坐标轴进行旋转。
属性参数同Angular X Drive
Projection Mode(投影模式) :设置当对象离开其限定的位置过远时,会让该对象回到其受限制的位置。可设置为位置和旋转(Position and Rotation)以及不选择(None)。
Projection Distance(投射距离) :设置当对象与其连接刚体的距离超过投影距离时,该对象会回到适当的位置。
Projection Angle(投影角度) :设置当对象与其连接刚体的角度差超过投影角度时,该对象会回到适当的位置。
Configured In World Space(在世界坐标系中配置) :勾选该项,所有与目标相关的数值都会在世界坐标系中来计算,而不在对象的局部坐标系中计算。
Swap Bodies(交换体) :勾选该项,则应用交换刚体功能,连接着的两个刚体会发生交换。
Break Force(断开力) :设置控制关节断开所需的作用力。
Break Torque(断开转矩) :设置关节断开所需的转矩。
Enable Collision(激活碰撞) :勾选该项,关节之间也会检测碰撞。
Enable Preprocessing(启用预处理) :勾选该项,实现关节的稳定。(该项默认为开启状态)
任何游戏对象在创建的时候都会附带Transform组件,用于储存并 *** 控物体的位置、旋转和缩放。
并且该组件是无法删除的。
Transform面板一共包含3个属性:
Position:位置
Rotation:旋转
Scale:(缩放)
可修改对象的位置、旋转方式、缩放数值
position;世界坐标系位置
localPosition;本地坐标系位置
缩放
localScale;自身缩放
lossyScale;全局缩放
旋转
transformrotation;世界坐标系旋转
transformlocalRotation;本地坐标系旋转
transformeulerAngles;世界坐标系旋转
transformlocalEulerAngles;本地坐标系旋转
欧拉角
构件在三维空间中的有限转动,可依次用三个相对转角表示这三个转角统称为欧拉角。
unity中的欧拉角有两种方式可以解释:
1,当认为顺序是yxz时(其实就是heading - pitch - bank),是传统的欧拉角变换,也就是以物体自己的坐标系为轴的。
2,当认为顺序是zxy时(roll - pitch - yaw),也是官方文档的顺序时,是以惯性坐标系为轴的。后者比较直观一些,但其实两者的实际效果是一样的,只是理解不一样。
欧拉角有两种:
静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。
动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态。
使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题
正常状态:三个独立的旋转轴
万向锁:一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。
万向节死锁会导致位置上连续变化,在数值表示上确是非连续的。给定的两个关键帧之间无法平滑过渡。解决方法:可以使用四元数球面线性插值
四元数
爱尔兰数学家William hamilton一直致力于寻找一种方法将复数2D扩展到3D他认为,新的复数应该有一个实部和两个虚部。但是一直没有成功。1843年,他在前往爱尔兰学院演讲的路上,突然意识到应该有三个虚部而不是两个。他把这种新复数类型性质刻在了桥上,这就是四元数。
四元数使用四个数来表达方位,因此命名为四元数用三个数来表达3D方位,一定会导致万向锁的问题。一个四元数包含一个标量分量和一个3D向量分量。通常标量分量为w,向量分量为v或者分开的x,y,z
记法:[w,v][w,(x,y,z)]四元数与复数:复数定义: a+bi, i是所谓的虚数,满足 i的平方等于-1;a是实部,b是虚部。
四元数扩展了复数系统,使用了三个虚部i,j,k一个四元数[w,(x,y,z)]定义了复数 w+xi+yj+zk很多标准复数的性质都能应用到四元数上。更重要的是,和复数来旋转2D中的向量类似,四元数也能用来旋转3D中的向量。
四元数是非常重要的工具类之一。在Unity中所有用到模型旋转的,其底层都是由四元数实现的,它可以精确的计算模型旋转的角度。Quaternion基于复数的表示并不容易被直观地理解,因此没有必要访问或修改单个Quaternion组件(x,y,z,w)只需通过Transform的rotation来实现旋转,或者构造新的旋转,如在两个旋转间平滑地插值
eulerAngles属性返回表示旋转的欧拉角度。表示旋转的角度,顺序依次绕z轴旋转eulerz度,绕x轴旋转eulerx度,绕y轴旋转eulery度范例:创建一个旋转,绕y轴,指定一个30度旋转角
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion 比如 transformrotation 就是一个四元数,其由四个部分组成
Quaternion = (xi + yj + zk + w ) = (x,y,z,w)
quaternion 中 (x,y,z) 跟旋转轴有关, w 与绕旋转轴旋转的角度有关,因为它们都要经过代数运算才能得出旋转轴和旋转角度
Unity3D 中 用quaternion 来对一个坐标点进行旋转,我进行的是第2种 *** 作,即对一个向量进行旋转;
首先 ,Quaternion 的基本数学方程为 :
Q = cos (a/2) + i (x sin(a/2)) + j (y sin(a/2)) + k(z sin(a/2)) (a 为旋转角度)
Qw = cos (angle / 2)
Qx = axisx sin (angle / 2)
Qy = axisy sin (angle / 2)
Qz = axisz sin (angle / 2)
我们只要有角度就可以给出四元数的四个部分值,例如我想要让点M=Vector3(o,p,q) 绕x轴顺时针旋转90度;那么对应的quaternion数值就应该为:
Q : Quaternion;
Qx = 1 sin(90度/2) = sin(45度) = 07071
Qy = 0;
Qz = 0;
Qw = cos(90度/2) = cos (45度) = 07071
Q = (07071, 0 , 0 , 07071);
m = Q m;(将点m 绕 x轴(1,0,0) 顺时针旋转了90度)
示例:
using UnityEngine;
using SystemCollections;
class EulerAnglesTest: MonoBehaviour
{
public Quaternion rotation = Quaternionidentity;
public void Awake() {
rotationeulerAngles = new Vector3(0, 30, 0);
transformrotation = rotation;
}
}
Translate
移动transform在translation的方向和距离。
SpaceSelf和SpaceWorld
注意,vectorforward和tranformforward区别
DebugLog("");
DebugLog(Vector3forward);
DebugLog(Vector3right);
DebugLog(Vector3up);
DebugLog("");
DebugLog(transformforward);
DebugLog(transformright);
DebugLog(transformup);
Rotate
TransformRotate 旋转
TransformRotateAround 围绕旋转
LookAt
盯着看
transformLookAt(Transform target);
transformLookAt(Vector3 worldPosition);
扩展
transformLookAt(Transform target,Vector3 worldUp);
z轴指向目标后,y轴旋转变换指向由worldUp向量暗示的方向。 如果省略worldUp参数,该函数将使用世界y轴。 worldUp只是一个提示矢量。
Find:通过名字查找子物体并返回它。如果没有查找到子物体名字,将返回null。如果名字包含“/”字符它将向路径一样穿越层次。
GetChild():根据子节点的序列查找子物体。
Transform维护父子关系
Transformroot 根
Transformparent 父级
TransformchildCount 子物体数
TransformSetParent();设置父节点
TransformDetachChildren 分离子物体
坐标系变换
TransformPoint:变换位置从物体坐标到世界坐标
InverseTransformPoint:变换位置从世界坐标到自身坐标
TransformDirection:将一个方向从局部坐标变换到世界坐标方向。
InverseTransformDirection:将一个方向从世界坐标变换到局部坐标方向。
(扩展)矩阵(Matrix)
一个标准的4x4变换矩阵。
一个变换矩阵可以执行任意的线形3D变换(例如,平移,旋转,缩放,切变等等)
并且透视变换使用齐次坐标。脚本中很少使用矩阵:最常用Vector3,Quaternion,而且Transform类的功能更简单。
单纯的矩阵用于特殊情况,如设置非标准相机投影在Unity中,Matrix4x4被Transform,Camera,Material和GL几个函数使用。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
DebugLog(tran
sformposition);
DebugLog(transformlocalPosition);
Vector4 vec = new Vector4(transformlocalPositionx,transformlocalPositiony,transformlocalPositionz,1);
DebugLog((transformparentlocalToWorldMatrixvec));
Vector4 vec2=new Vector4(transformpositionx,transformpositiony,transformpositionz,1);
DebugLog(transformparentworldToLocalMatrixvec2);
以上就是关于unity面板上的坐标是相对的还是全局的全部的内容,包括:unity面板上的坐标是相对的还是全局的、unity游戏开发就业方向那么多应该如何选择、unity基础(GameObject transform)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)