【和我一起学习Unity3D】Unity3D的坐标控制
坐标这个东西,在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的坐标控制的更多相关文章
- [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...
- [Unity3D]Unity3D游戏开发之角色控制漫谈
各位朋友,大家好.我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项 ...
- [Unity3D]Unity3D游戏开发之飞机大战项目解说
大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用
大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...
- [Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
大家好,我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 今天我们来一起学习在Unity3D中怎样实现角色攀爬效果. 在RPG游戏中,某些游戏场景经常须要玩家 ...
- [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛
大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开 ...
- 小菜学习设计模式(五)—控制反转(Ioc)
写在前面 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Metho ...
- zigbee学习之路(四):按键控制(中断方式)
一.前言 通过上次的学习,我们学习了如何用按键控制led,但是在实际应用中,这种查询方式占用了cpu的时间,如果通过中断控制就可以解决这个问题,我们今天就来学习按键控制的中断方式. 二.原理分析 传统 ...
- js鼠标及对象坐标控制属性详细解析
对js鼠标及对象坐标控制属性进行了详细的分析介绍. offsetTop获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算顶端位置. offsetLeft获取对象相对于版面或由 ...
随机推荐
- 一些常用的JS函数
//获取元素属性 function getStyle(obj, attr) { return obj.currentStyle ? obj.currentStyle[attr] : getComput ...
- linux系统下安全管理
1.引导程序安全 linux系统的root密码是很容易破解的,当然前提是你没有设置引导程序密码,如GRUB或LILO,为了防止通过引导程序破译root密码,强烈建 议设置GRUB或LILO的引导密码, ...
- firemonkey打开子窗体(匿名回调函数)
procedure TForm1.Button1Click(Sender: TObject);varChildForm: TForm2;beginChildForm := TForm2.Create( ...
- Gradle DSL method not found: 'android()
原文错误提示: Error:(16, 0) Gradle DSL method not found: 'android()'Possible causes:<ul><li>Th ...
- Apache OpenOffice 与 LibreOffice 之间的抉择
Apache OpenOffice 与 LibreOffice 之间的抉择 Apache OpenOffice和LibreOffice都 是OpenOffice.org的现代衍生产品.最近几年,几乎所 ...
- iOS 倒计时
// // RootViewController.m // MyTimerDemo // // Created by huluo on 1/21/14. // Copyright (c) 2014 b ...
- 优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心
优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心 优雅智慧女性课程班 课程总览 思想睿智成熟,外表美丽自信,气质优雅端庄,是魅力女性所应具备的特性.在当今不确定环境下, ...
- nginx启动关闭
[root@localhost sbin]# ./nginx -s reload [root@localhost sbin]# ./nginx -s stop [root@localhost sbin ...
- git push报错
git: No refs in common and none specified; doing no (2012-10-28 11:43:10) 转载▼ 标签: 杂谈 分类: 项目管理 用gitol ...
- 佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"
今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' ...