坐标这个东西,在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度

【和我一起学习Unity3D】Unity3D的坐标控制的更多相关文章

  1. [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动

    大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...

  2. [Unity3D]Unity3D游戏开发之角色控制漫谈

    各位朋友,大家好.我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项 ...

  3. [Unity3D]Unity3D游戏开发之飞机大战项目解说

    大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...

  4. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)

    ---------------------------------------------------------------------------------------------------- ...

  5. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  6. [Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现

    大家好,我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 今天我们来一起学习在Unity3D中怎样实现角色攀爬效果. 在RPG游戏中,某些游戏场景经常须要玩家 ...

  7. [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛

    大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开 ...

  8. 小菜学习设计模式(五)—控制反转(Ioc)

    写在前面 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Metho ...

  9. zigbee学习之路(四):按键控制(中断方式)

    一.前言 通过上次的学习,我们学习了如何用按键控制led,但是在实际应用中,这种查询方式占用了cpu的时间,如果通过中断控制就可以解决这个问题,我们今天就来学习按键控制的中断方式. 二.原理分析 传统 ...

  10. js鼠标及对象坐标控制属性详细解析

    对js鼠标及对象坐标控制属性进行了详细的分析介绍.  offsetTop获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算顶端位置. offsetLeft获取对象相对于版面或由 ...

随机推荐

  1. 【自学php】第三天 - 读写文件

    这次的例子是把订单的数据保存起来,一般是用数据库来进行数据的存储最好,但是今天目的是为了学习读写文件,所以这次把数据存在文件里. 读写文件有一般有三个步骤: 1)打开文件.如果文件不存在,需要先创建它 ...

  2. 驳Linux不娱乐 堪比Win平台中十款播放器

    播放器在我们日常生活中扮演着非常重要的角色,在Windows操作系统中,播放器被应用的非常广泛,不但我们可以听音乐,甚至还可以听广播,制作铃声,下载音乐等等.而在Linux发行版中,缺少娱乐性一直性W ...

  3. 习题3.10 约瑟夫环 josephus问题

    /* assume a header */ /* 双向循环链表 */ struct Node; typedef struct Node * PtrToNode; typedef PtrToNode L ...

  4. Android中Gallery显示手机中的图片

    在网上找了好久似乎都没有关于这方面的(可能是自己的信息量太小吧),于是自己来填补这个漏洞吧. 常见的方法莫过于自己定义一个数组,用以存储图片的引用,如: 1 private Integer[] pic ...

  5. Struts2 一、 视图转发跳转

    <struts> <constant name="struts.118n.encoding" value="UTF-8"></co ...

  6. foj 2150 Fire Game(bfs暴力)

         Problem Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M ...

  7. Tkinter类之窗口部件类

    Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下:窗口部件及说明:Button:一个简单的按钮,用来执行一个命令或别的操作.Canvas:组织图形 ...

  8. 设计模式六大原则——迪米特法则(LoD)

    1.背景 在图书馆借书.刚開始的时候,直接跑到对应的楼层去,到里面去转,去找要借的书,在里面溜达半天才干找到:后来知道图书馆有一个电脑查询处.然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的 ...

  9. POJ2528线段树基础

    開始就直接用延迟标记搞了下.最后发现内存肯定会爆了.数据太大了. 问了瓜神,原来应该用离散化来做这题,详细见凝视 #include <cstdio> #include <cstrin ...

  10. linux下创建用户并且限定用户主目录

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号 一方面可以帮助系统管理员对使用系统的用户进 ...