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组件(三)的更多相关文章

  1. 关于Unity中的transform组件(一)

    一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...

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

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

  3. unity中Event Trigger组件应用代码

    using UnityEngine; using System.Collections; using UnityEngine.Events; using UnityEngine.EventSystem ...

  4. Unity中的Transform Gizmo中的Pivot和Center

    选择中心(Center)意味着使用当前所选所有物体的共同轴心, 选择轴心(Pivot)意味着将使用各个物体的实际轴心 区别在于是否选中了多个物体或者有层级关系的物体. 第一张图是Center,中心在组 ...

  5. unity中遍历Transform的子物体

    1.遍历Transform直接子transform private void Start() { var Equipment = building.transform.FindChild(" ...

  6. Unity UGUI——Rect Transform组件(基础属性)

    基础属性:Width.Height.Pivot图示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fo ...

  7. unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片

    private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...

  8. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  9. Unity编程标准导引-Unity中的基本概念-2.1界面概览

    Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...

随机推荐

  1. Onvif鉴权实现方式

    Onvif鉴权实现方式 Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) ) gsoap中digest生成代码: int ...

  2. 使用Bundle进行VIM插件的管理

    http://www.oschina.net/p/vundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle ...

  3. 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法

    转: using System; class Program { static void Main() { string[] array = { "cat", "dot& ...

  4. 【WEB开发】微信网页授权第三方登录接口(WEB登录)

    随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式.(具体代码U盘) 本文链接至:http://blog.csdn.net/hxke ...

  5. ASP.NET配置文件machine.config与性能[转]

    转 http://www.cnblogs.com/chenlulouis/archive/2010/05/26/1744261.html http://www.cnblogs.com/zhangron ...

  6. Linux命令-网络命令:ping

    ping 192.168.67.1 ping windows网卡地址,默认会一直ping下去,区别于windows的ping命令ping4次 ping -c 次192. 友情提示:如果您(阅读者)是从 ...

  7. 关于windows10 CMD 的一些操作

    之前接触过cmd的一些操作方法,比如用dir.tasklist等一些方法,但是用了会立马忘记,再用到时又要重新google,这着实让我头痛!!! 今天又碰到一个关于改变目录的问题,又是纠结万分,所以就 ...

  8. [cocos2dx笔记010]用于UI的事件管理器

    cocos2dx有一个编辑器:cocostudio.眼下来说,已经是比較好用了.仅仅要载入导出的资源.就能够用上了.省去手动搭建面的麻烦. 可是.非常多须要事件的地方,操作比較麻烦,所以这里提供一个事 ...

  9. 【死磕Java并发】-----J.U.C之AQS:CLH同步队列

    此篇博客全部源代码均来自JDK 1.8 在上篇博客[死磕Java并发]-–J.U.C之AQS:AQS简单介绍中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个F ...

  10. [Jobdu] 题目1504:把数组排成最小的数

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...