在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward。

对于Vector3来说,它只是缩写。没有其它任何含义。

  • Vector3.forward ,(0,0,1)的缩写。//在transform.Translate()中使用时,如果不表明坐标系,则为物体的局部坐标,即物体自身的正前方。
  • Vector3.right, (1,0,0)的缩写。
  • Vector3.up , (0,1,0)的缩写。

对于Transform.forward来说,它代表当前物体的物体坐标系的z轴在世界坐标系上的指向。(世界坐标系中的蓝色轴)。

如果使用Transform.Translate。需要注意Vector3和Transform是不同的。

1.Spcae.World

transform.Translate(Vector3.forward * Time.deltaTime, Space.World);
transform.Translate(transform.forward * Time.deltaTime, Space.World);

当局部坐标=世界坐标时。

 当局部坐标!=世界坐标时。(旋转30度)

2.Spcae.Self

transform.Translate(Vector3.forward * Time.deltaTime, Space.Self);
transform.Translate(transform.forward * Time.deltaTime, Space.Self);

当局部坐标=世界坐标时。

当局部坐标!=世界坐标时。(旋转30度)

所以你会发现,当使用transform.Translate时参数是Space.Self。Transform.forward的移动方向会很奇怪。。

原因是transform.Translate参数Space.Self需要一个局部坐标系的方向向量,但是transform.forward是世界坐标的方向向量。

所以除非必要,否则别用这句代码:

transform.Translate(transform.forward * Time.deltaTime, Space.Self);

这会让你物体的前进方向变的混乱。

应该用:

transform.Translate(transform.forward * Time.deltaTime, Space.World);//或者
transform.Translate(Vector3.forward * Time.deltaTime, Space.Self);

小问题:为什么旋转30°时,transform.Translate(transform.forward * Time.deltaTime, Space.Self);,这句代码会让物体往60°的方向移动呢?

首先transform.forward是自动对物体旋转值算出前进方向向量的变量。同时 transform.forward是当前物体的物体坐标系的z轴在世界坐标系上的指向。系统根据物理本身的局部坐标系计算出z轴在世界坐标系上的旋转值是30°,但是你使用transform.Translate并且设置了Space.Self按照局部坐标移动,那么,transform.forward这个30°的世界坐标的旋转又要根据物体的局部坐标系转化成局部坐标,那么两次30°+30°就是最后我们所看到物体往世界坐标的60°旋转方向移动。

Unity3d Transform.forward和Vector3.forward的区别!的更多相关文章

  1. transform.forward和vector3.forward

    Vector3.forward的值永远是(0,0,1)(这里的(0,0,1)是世界坐标的(0,0,1)),而transform.forward我们可以理解为其对应物体的z轴方向,是一个向量,而不是一个 ...

  2. Unity3d vector3.forward和transform.forward的区别!

    原文连接: http://blog.csdn.net/kaluluosi111/article/details/17206655 在unity3d中有2个forward,一个是vector3.forw ...

  3. vector3.forward和transform.forward的区别!

    http://blog.163.com/bowen_tong/blog/static/20681717420146654927791/ vector3.forward和transform.forwar ...

  4. 关于Vector3.forward和Transform.forward

    在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward. 对于Vector3来说,它只是缩写.没有其它任何含义. Vector3.forwar ...

  5. unity------------------------------transform.forward与Vector.forward的区别

    在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样.他们之间的区别主要体现在在不同坐标系时的反映上. ...

  6. Vector3.forward

    这里我要说的就是Vector3.forward ,它等价与 new Vector3(0,0,1):它并不是一个坐标,它是一个标准向量,方向是沿着Z轴向前.这样平移一次的距离就是1米, 如果 Vecto ...

  7. Forward reference vs. forward declaration

    Q:Im a bit confused. What is the difference between forward declaration and forward reference? Forwa ...

  8. CSS动画详解及transform、transition、translate的区别

    刚看完一节慕课网的css动画,在此总结下 1. 先说下 transform.transition.translate的区别 transform 和 transition是css的2个属性,transl ...

  9. 【转】Unity3D Transform中有关旋转的属性和方法测试

    Transform有关旋转个属性和方法测试 一,属性 1,var eulerAngles : Vector3 public float yRotation = 5.0F; void Update()  ...

随机推荐

  1. 数据仓库四个特点(面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant))

    1.面向主题. 数据仓库中的数据是按照一定的主题域进行组织. 主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关.而操作型数据库的数据组织面向事 ...

  2. Tidb数据库导入数据出现oom问题

    今天使用insert操作向tidb中插入数据,发现正在导入的过程中出现如下错误: mysql: [Warning] Using a password on the command line inter ...

  3. css常见效果

    1.ul li横排 /* ul li以横排显示 */ /* 所有class为menu的div中的ul样式 */ div.menu ul { list-style:none; /* 去掉ul前面的符号 ...

  4. openlayer3 基础学习一创建&显示地图

    <!doctype html> <html lang="en"> <head> <link rel="stylesheet&qu ...

  5. Beta阶段第五次冲刺

    Beta阶段第五次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...

  6. 团队作业——Beta冲刺1

    团队作业--Beta冲刺 冲刺任务安排 杨光海天 今日任务:开会讨论下,Beta阶段主要的冲刺内容 明日任务:根据冲刺内容,具体分配个人任务,对于冲刺内容做准备 吴松青 今日任务:跟新组员熟悉下,联络 ...

  7. iptables设置规则

    iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8080 -j ACCEPT  添加到最后一条iptables -I INPUT -p tcp --dpor ...

  8. 【转】PHP解析带CDATA的XML方法

    XML文件,如下 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName& ...

  9. 分享一个excel根据文件超链接获取链接文档的最后更新时间

    #获取制定单元格内超链接对应的链接地址Sub geturi() For Each cell In Range("E3:E43") If cell.Hyperlinks.Count ...

  10. pyspider爬取数据存入mysql--2.测试数据库能否连通

    做一个简单的测试,看数据能否存入mysql 1 #!/usr/bin/env python 2 # -*- encoding: utf-8 -*- 3 # Created on 2017-10-26 ...