关于Unity中的transform组件(三)
game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下
四元数:(1)Quaternion rot
(2)this.cube.rotation
欧拉角:Vector3类型的数据
Vector3的x,y,z是按照Unity的坐标系的顺序,所以不能像数学里面,把Unity的z当成了y,Unity的y当成了z。
一、使用欧拉角做旋转(欧拉角)
private Transform cube;
void Start () {
this.cube = this.transform.FindChild("Cube");//找到子节点叫Cube的节点的transform组件
this.cube.Rotate(new Vector3(0, 45, 0));//旋转45度,逆时针为正,Rotate里面还可以加一个参数,表示绕谁旋转,Space_Self,Space_World,默认是绕自己坐标系旋转。
}
二、使用四元数做旋转(旋转方向向量,角度),其实这里没有用到四元数来旋转,只是一个方法,四元数是一个虚数,很复杂。
private Transform cube;
void Start () {
this.cube = this.transform.FindChild("Cube");//找到子节点叫Cube的节点的transform组件
// 旋转向量 + 角度
this.cube.Rotate(new Vector3(0, 1, 0), 45);//旋转45度,逆时针为正,new Vector3(0, 1, 0)表示绕y轴旋转,Rotate里面还可以加一个参数,表示绕谁旋转,Space_Self,Space_World,默认是绕自己坐标系旋转。
}
三、绕着一个物体旋转
void Update () {
float w = 180; // 定义一个旋转速度
Vector3 pos = new Vector3(0, 0, 0);//定义围绕旋转的目标点
this.sphere.RotateAround(pos, new Vector3(0, 1, 0), Time.deltaTime * w);//绕着世界(0,0,0)点,绕目标y轴,每一次刷新旋转Time.deltaTime * w的角度
}
四、盯着一个物体
1.LootAt(): 视线对准对应的方位。像寻路,NAV导航的时候会用到,游戏跟随会用到。
void Update () {
// LookAt有几个参数
// (1)旋转角度,只有给出盯着的目标this.sphere,或者盯着的目标的位置this.sphere.position就会得到每次的旋转角度
// (2)头顶方向,旋转时候饶的这个向量,默认是y轴
this.cube.LookAt(this.sphere, new Vector3(0, 1, 0));
}
2.LookRotation():来自四元数的方法,视线对准对应的方位。
void Update () {
// LookRotation有几个参数
// (1)旋转角度,只有给出盯着的目标this.sphere,或者盯着的目标的位置this.sphere.position就会得到每次的旋转角度
// (2)头顶方向,旋转时候饶的这个向量,默认是y轴
Quaternion rot = Quaternion.LookRotation(this.sphere.position);
this.cube.rotation = rot;
}
五、用四元数计算两个旋转之间的夹角;
Angle(lhs, rhs);//用处不是很大,可以得到两个四元数旋转的夹角,然后除于2,得到夹角的中间值。
六、计算两个旋转的插值
从开始向量到目标向量的旋转
void start(){
Quaternion rot = Quaternion.FromToRotation(new Vector3(0,0,1),new Vector3(1,0,1));//里面的两个参数是初始向量和结束向量,得到的差值是一个四元数
}
七.Vector3
1.坐标
2.向量:运算和数学里面是一样的。
a.向量的加法
(x1,y1,z1)+(x2,y2,z2)
b.向量的减法
(x1,y1,z1)-(x2,y2,z2)
c.向量的乘除法:相当于缩放
Vector3 vec = new Vector3(1, 0, 1);
vec = vec * -3;
Debug.Log(vec);
d.向量的模:开根号,得到标量
e.向量的等于和不等于:==和!=
(x1,y1,z1)==(x2,y2,z2)
f.向量平移
void update(){
float speed = 1;
float s = speed * Time.deltaTime;
this.cube.transform.position += (Vector3.forward * s);
}
g.单位向量
Debug.Log(Vector3.zero);//(0,0,0)
Debug.Log(Vector3.one);//(1,1,1)
Debug.Log(Vector3.up);//(0,1,0)
Debug.Log(Vector3.forward);//(0,0,1)
Debug.Log(Vector3.right);//(1,0,0)
e.向量的线性插值,可以实现一个位置到另外一个位置
from...to...
0是起点,1是终点,0.5是中心位置
from+(to-from)*t,t的取值范围是(0,1)
void update(){
// from (-10, 0, 0), to(10, 0, 0);
this.cube.transform.position = Vector3.Lerp(Vector3.zero, Vector3.right * 10, Time.time);//Time.time是每次累积的总时间,这里作为t,可以设置一下来调整移动的速度,Time.time*0.1f放慢
}//从一个点平移到另外一个点
f.向量的球形插值
void update(){
this.cube.transform.position = Vector3.Slerp(Vector3.right * -10, Vector3.right * 10, Time.time * 0.1f);
}//从一个点转到到另外一个点
g.两个向量之间的距离
// distance两个向量的距离
float len = Vector3.Distance(Vector3.right, Vector3.right * -1);
Debug.Log(len);
h.两个向量之间的角度
float degree = Vector3.Angle(Vector3.right, Vector3.right * -1);
Debug.Log(degree);
3.欧拉角
八、获取组件实例
所以的组件实例都有一个成员变量名字为transform的,指向所在节点的transform组件实例,包括transform组件实例也有成员变量transform,因为它自己也是一个组件,gameObject也有成员变量transform指向自己的transform组件实例。
所有组件实例都有一个成员变量gameObject,指向所在节点。
用老师的话讲
// 凡是组件,都会有一个成员为gameObject可以获得这个组件实例所绑定的节点。
// 凡是组件,都会有一个成员为transrom 可以获得这个组件实例所绑定节点的transform组件。
// 凡是GameObject都会有一个成员 transfrom指向 它所挂载的Transrom组件的实例。
1.通过gameObject获得挂载的组件
// 获得节点上所挂的第一个transfrom组件实例
Transform tran = this.gameObject.GetComponent<Transform>();
// 通过GameObject, 返回这个节点所挂的所有为 这种类型的组件
this.gameObject.GetComponents<Transform>();
this.cube.gameObject.GetComponent<cube>();
this.cube.gameObject.GetComponent("cube");
2.通过组件,获得当前组件所挂的节点的其他组件
this.GetComponent<Transform>();
this.cube.GetComponent<cube>();
this.cube.GetComponent("cube");
九. MonoBehaviour将参数绑定到编辑器
只要把组件类的成员变量的权限设置成public,就可以在Unity编辑器界面显示出参数。
关于Unity中的transform组件(三)的更多相关文章
- 关于Unity中的transform组件(一)
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
- 关于Unity中的transform组件(二)
在Scene视图中的蓝色网格,每一格默认是1米 一.沿着Z轴每秒移动10米 Transform cube_trans; void start(){ this.cube_trans=this.trans ...
- unity中Event Trigger组件应用代码
using UnityEngine; using System.Collections; using UnityEngine.Events; using UnityEngine.EventSystem ...
- Unity中的Transform Gizmo中的Pivot和Center
选择中心(Center)意味着使用当前所选所有物体的共同轴心, 选择轴心(Pivot)意味着将使用各个物体的实际轴心 区别在于是否选中了多个物体或者有层级关系的物体. 第一张图是Center,中心在组 ...
- unity中遍历Transform的子物体
1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...
- Unity UGUI——Rect Transform组件(基础属性)
基础属性:Width.Height.Pivot图示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fo ...
- unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片
private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...
随机推荐
- 创建组件“AxLicenseControl”失败
打开以前的程序,准备来添加一个功能,打开主程序就报错: 我未曾改变过版本,原来是由于破解测试需要,修改了系统时间,时间对不了,ArcGIS的问题,改过来就正常了.
- 流操作结束后,一定要调用close(). java有垃圾回收器, 这样做是多此一举吗?
流不单在内存中分配了空间,也在操作系统占有了资源, java的gc是能从内存中回收不使用的对象, 但对操作系统分配的资源是无能为力的, 所以就要调用close()方法来通知OS来释放这个资源.
- Matlab矩阵基本操作(定义,运算)
转自:http://blog.csdn.net/perfumekristy/article/details/8119861 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ...
- 多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )
如果你还是不太懂位运算,请看我的文章:那些年我们一起遗忘的位运算! 下面是我在这次项目中学习到的,我眼中的位运算的应用!主要是实现 通知的3个操作: 1. 置顶 2. 设为首页 3. 同时为 “ ...
- 讯飞语音唤醒SDK集成流程
唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q48788 ...
- CLR_Via_C#学习笔记之CLR的执行模型
1:公共语言运行时(Common Language Runtime,CLR)是一个可由多种编程语言使用的“运行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CL ...
- FileUpload类中FileUpload1.FileName和FileUpload1.PostedFile.FileName的区别
FileUpload1.FileName 用来获取客户端上使用 FileUpload 控件上载的文件的名称.此属性返回的文件名不包含此文件在客户端上的路径.FileUpload1.PostedFile ...
- Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出
环境:一个基于B/S的MIS系统,硬件为两台2个CPU.8GB内存的HP小型机,服务器是WebLogic 9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群. 说明:由于是亲 ...
- mariadb 10.1.10安装
Maridb 10.1.10 on centos 6.6 *********************************************************************** ...
- Android中对Handle机制的理解
一.重要參考资料 [參考资料] 眼下来看,以下的几个网址中的内容质量比較不错.基本不须要再读别的网址了. 1.android消息机制一 http://xtfncel.javaeye. ...