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. cocos2d-x 音乐与音效

    1.背景音乐 要使用一个音乐,首先要预加载这个音乐,预加载的方法如下 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic( CCF ...

  2. mac上xcode4和xcode5共存及修改默认打开方式

    先安装xcode4 安装之后,在所有程序里面---改名xcode 为 xcode4 安装xcode5  安装之后,在所有程序里面---改名为xcode 为xcode5 安装4,5之后,默认打开方式就是 ...

  3. vue - router 起步

    官方API:https://router.vuejs.org/zh/guide/#javascript vue-cli for index.js export default new Router({ ...

  4. ACM 刷题错误总结 持续更新并持续回想中o(╯□╰)o

    一.段错误/RE 1.& 变量取地址 2.数组越界 3.爆栈, 非常可能是死循环,ruturn的边界没有处理好,或者是递归的内容里有死循环的部分. 4.线段树 逢写必错,都是build(i*2 ...

  5. Effective java读书札记第一条之 考虑用静态工厂方法取代构造器

    对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器. 另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地.类能够提供一个共同拥有的静态 工厂方法.它 ...

  6. IntelliJ IDEA类头注释和方法注释

    The template is editable. Along with static text, code and comments, you can also use predefined var ...

  7. TensorFlow 安装 Ubuntu14.04

    1.Install pip (or pip3 for python3) if it is not already installed: # Ubuntu/Linux 64-bit $ sudo apt ...

  8. No persister for nhibernate 解决下面的问题

    在你的实体类对应的配置文件点右键选择属性,修改类型为:一直复制和嵌入的资源.就可以了.

  9. scanf深究

    例子: #include <stdio.h>#include <string.h> main(){ char buffer[1024]; scanf("%s" ...

  10. dbcp2连接池获取数据库连接Connection

    一.先来看看手工创建的方式 public static Connection getConnection() { Connection conn = null; try { Class.forName ...