博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【和我一起学习Unity3D】Unity3D的坐标控制
阅读量:6991 次
发布时间:2019-06-27

本文共 2514 字,大约阅读时间需要 8 分钟。

坐标这个东西,在Unity3D里面是分为几个类的,各自是Vector2,Vector3。Vector4;含义各自是:二维坐标系,三维坐标系,四维坐标系。一般做游戏呢,用到的最多的就是Vector3了。这篇文章主要讲的也是这个。

一般一个场景中。有X轴,Y轴,Z轴三个轴,以默认的坐标来说 X轴控制左右,Y轴控制上下。Z轴控制前后。

在这里有一个函数值得特别说明一下,就是transform组件里面的LookAt。这个函数用以将一个GameObject的Z轴对准另外一个GameObject。这种话,假设想将这个GameObject移向另外一个GameObject的话,就能够直接将这个GameObject向前移就能够了,以下是样例:

using UnityEngine;using System.Collections;    public class CCubeA: MonoBehaviour {        publuc GameObject m_gCubeB;    publuc float m_fMoveSpeed = 2.0f;    // Use this for initialization      void Start () {            }            // Update is called once per frame      void Update () {            this.transform.LookAt(m_gCubeB.transform);          this.transform.Translate(Vector3.forward * m_fMoveSpeed  * Time.deltaTime);    }  }
这种话。当前方块A就向着方块B,以每秒2个单位的速度平移过去了。

这里还调用了一个函数,叫做Translate,这个函数主要是用来平移物体的(注意的是这个平移是一个瞬间动作),參数是一个Vector3,这个參数是表示平移的量,本样例中的公式解释为:单位距离乘以速度乘以单位时间等于单位时间上走的距离。

第一个变量Vector3.forward实质上就是(0,0,1)。由上文我们知道。Z轴实际上是管理前后的。forward就是向前的意思。

第三个变量Time.deltaTime是上一帧到这一帧所花费的时间,乘上这个时间的话,就能够变成每秒平移的距离了。

整句话连起来就是:向前以每秒m_fMoveSpeed的速度平移(因this已经LookAt(m_gCubeB),所以向前移也就是向着m_gCubeB移动)。

------------------------------------------------------------------------------------------------------------

以下讲的是GameObject的旋转,旋转用的是transform中的Rotate,函数原型是:

void Rotate (Vector3 eulerAngles ,Space  relativeTo = Space.Self);
第一个參数是转移的角度,是角度制的,不是弧度制的。另外为什么是一个Vector3的变量呢?由于通过这个变量能够指定环绕哪个轴进行旋转。第二个參数是用来指定相对于自身旋转还是相对于世界坐标旋转。

以下给出一个样例:

using UnityEngine;using System.Collections;    public class CCubeA: MonoBehaviour {        publuc float m_fRotateSpeed = 2.0f;    // Use this for initialization      void Start () {            }            // Update is called once per frame      void Update () {            this.transform.Rotate(Vector.up * m_fRotateSpeed  * Time.deltaTime);    }  }
这个样例中的物体会以每秒2度的速度进行旋转,旋转的方式是环绕着X轴逆时针的旋转。

另外一个旋转的函数是RotateAround,其能够指定环绕某个GameObject进行旋转,这样能够做非常多操作。比方摄像机环绕着主角进行旋转。

这个函数的原型是:

void RotateAround (Vector3 point ,Vector3 axis,float angle);
第一个參数是环绕的点的位置,第二个參数是以什么轴为核心进行旋转,第三个自然是旋转的角度了。以下再举一个样例:

using UnityEngine;using System.Collections;    public class CCubeA: MonoBehaviour {      public GameObjcet m_gCubeB;    publuc float m_fRotateSpeed = 2.0f;    // Use this for initialization      void Start () {            }            // Update is called once per frame      void Update () {            this.transform.RotateAround(m_gCubeB.transform.position, Vector.up, m_fRotateSpeed  * Time.deltaTime);    }  }
这个样例是当前的GameObject以m_gCubeB的位置为中心,环绕着m_gCubeB的Y轴进行旋转。旋转的速度是每秒2度

转载地址:http://pfbvl.baihongyu.com/

你可能感兴趣的文章
iOS开发之--调用打电话,发邮件,发短信的系统功能的代码
查看>>
前端框架VUE----对象的单体模式
查看>>
管理簇+创建簇索引+修改簇+删除簇
查看>>
New Concept English three(17)
查看>>
New Concept English three (53)
查看>>
CSS Hack
查看>>
Polysh实现多服务器批量执行shell
查看>>
矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
查看>>
jquery ajax中error返回错误解决办法
查看>>
maven核心,pom.xml详解
查看>>
Python2处理字符集问题
查看>>
互联网“平滑数据迁移”架构技术实践
查看>>
论相貌
查看>>
python爬虫和数据分析、数据挖掘
查看>>
我理解的数据库事务
查看>>
Tomcat的启动与关闭以及启动时一闪而过的解决方法
查看>>
composer设置忽略版本匹配
查看>>
D. Frets On Fire 前缀和+二分
查看>>
solrnet - document
查看>>
第十一节: 封装通用的定时调度框架,实现新增、删除、开启、暂停计划任务:...
查看>>