当前位置: 首页 > news >正文

建设资格注册管理中心网站沈阳今天刚刚发生的新闻

建设资格注册管理中心网站,沈阳今天刚刚发生的新闻,网络传媒网站,英文外贸网站建设网站设计方案移动和旋转是游戏对象最频繁地操作。我们上个章节简单介绍了Cube的移动和旋转。移动是修改transform的position属性,旋转是修改transform的eulerAngles(欧拉角)属性,两者属性值均可以使用Vector3向量来实现。需要大家注意的是&…

移动和旋转是游戏对象最频繁地操作。我们上个章节简单介绍了Cube的移动和旋转。移动是修改transform的position属性,旋转是修改transform的eulerAngles(欧拉角)属性,两者属性值均可以使用Vector3向量来实现。需要大家注意的是,transform.forward和Vector3.forward的区别(参考坐标系是不一样的)。接下来,我们使用transform的Translate方法来进行移动。首先,我在重新创建一个“SampleScene4”场景。我们在该创建中同样创建一个“Cube”游戏对象和“CubeTranslate.cs”脚本文件,并附加两者在一起。

 

以下是脚本代码内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeTranslate : MonoBehaviour
{// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.W)){transform.Translate(new Vector3(0, 0, 1));}// 向左旋转45度if (Input.GetKeyDown(KeyCode.Q)){transform.eulerAngles += new Vector3(0, -45, 0);}// 向右旋转45度if (Input.GetKeyDown(KeyCode.E)){transform.eulerAngles += new Vector3(0, 45, 0);}}
}

我们实现的功能还是之前的一样,按下“W”键向前移动。为了方便观察Cube的移动,我们需要将相机放置Cube的正上方“俯视”Cube。摄像机修改参数如下:

为什么要修改成这些数值,我们上一个章节介绍过了,修改后效果如下:

然后,我们Play工程,查看运行结果。

测试结果就是相对于本地坐标系的移动,也就是游戏对象的正前方移动。

 

 

很明显,默认情况下,Translate(Vector3(0, 0, 1))方法与transform.forward是等效的,也就是相对于本地坐标系而言。那么,如何改成世界坐标系的移动呢,不受游戏物体旋转影响呢?

其实该方法还有第二个参数,也就是Space.Self本地坐标系和Space.World世界坐标系。

显然,如果我们不填写第二个参数的话,默认就是Space.Self本地坐标系,我们改一下

        if (Input.GetKeyDown(KeyCode.W)){//transform.Translate(new Vector3(0, 0, 1));transform.Translate(new Vector3(0, 0, 1), Space.World);}

接下来,我们在重新测试,发现现在的移动就是相对于世界坐标系的啦,截图就不添加了。总结:游戏对象的移动可以通过在transform.translate()方法实现,也可以直接修改transform.position属性。这里需要区分的是世界坐标系还是自身坐标系。如下:

世界坐标系z轴前进:transform.position += vector3.forward
自身坐标系z轴前进:transform.position += transform.forward
世界坐标系z轴前进:transform.translate(vector3.forward, space.world)
自身坐标系z轴前进:transform.translate(vector3.forward, space.self)

如果是space.world的话,还可以使用transform.forward;但是最好不要将transform.forward应用到space.self上。因此还是建议translate方法+ vector3向量搭配使用进行移动。

接下来,我们来说一说旋转,这个是比较复杂的。我们之前的旋转是通过修改transform的eulerAngles(欧拉角)实现的。但是,在我们的印象中,游戏对象的旋转应该是rotation属性,尤其是在Inspector检视面板中,我们也能够看到这个名字的属性。例如下面的截图就是我们对摄像机对象做的旋转设置,也就是在X轴方向上面旋转90度。请注意,此时的参考坐标系是父对象,如果没有父对象就是世界坐标系。

因此,显而易见这是欧拉角数值。但是在Unity API中,这个rotation属性是一个四元数(Quaternion)。关于四元数的概念以及它相对于欧拉角的优势,我们这里不在介绍,它唯一的缺点就是不如欧拉角简单直观。因此,我们往往借助欧拉角转换成四元数再控制游戏对象旋转。接下来,我们修改一下代码,如下所示:

        // 向左旋转45度if (Input.GetKeyDown(KeyCode.Q)){//transform.eulerAngles += new Vector3(0, -45, 0);transform.rotation = Quaternion.Euler(new Vector3(0, -45, 0));}// 向右旋转45度if (Input.GetKeyDown(KeyCode.E)){//transform.eulerAngles += new Vector3(0, 45, 0);transform.rotation = Quaternion.Euler(new Vector3(0, 45, 0));}

上面的代码实现了“Q”和“E”键分别向左右两方向按照45度单位的旋转。但是当我们运行当前工程的时候,发现它并不能连续旋转,而只是旋转一下就停止了。我们很容易想到使用“+=”操作符,但是很遗憾的是,transform.rotation并不支持这样的运算。因此,我们只能换一种方式来解决这个问题,我们可以使用一个类全局变量来存储游戏对象的旋转数据。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeTranslate : MonoBehaviour
{// Y轴旋转角度值private float y = 0.0f;// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.W)){//transform.Translate(new Vector3(0, 0, 1));transform.Translate(new Vector3(0, 0, 1), Space.World);}// 向左旋转45度if (Input.GetKeyDown(KeyCode.Q)){//transform.eulerAngles += new Vector3(0, -45, 0);//transform.rotation = Quaternion.Euler(new Vector3(0, -45, 0));y -= 45;transform.rotation = Quaternion.Euler(new Vector3(0, y, 0));}// 向右旋转45度if (Input.GetKeyDown(KeyCode.E)){//transform.eulerAngles += new Vector3(0, 45, 0);//transform.rotation = Quaternion.Euler(new Vector3(0, 45, 0));y += 45;transform.rotation = Quaternion.Euler(new Vector3(0, y, 0));}}
}

重新运行后,我们发现Cube可以进行“连续性”的旋转了,如下Gif图所示:

我们发现使用transform.rotation进行旋转的话,还是比较费劲的。但是,有一点大家要明白,这里的旋转和上面的移动是相同的道理,同样存在世界坐标系和局部坐标系的前提条件。这个当然取决于我们使用Vector3类还是使用Transform类。接下来我们就使用transform提供的Rotate方法来进行旋转,它的参数是欧拉角,比较容易让人直观的理解,而且也提供了坐标系参数的指定(Space.Self或者Space.World,当然默认还是Space.Self)。

        // 向左旋转45度if (Input.GetKeyDown(KeyCode.Q)){//transform.eulerAngles += new Vector3(0, -45, 0);//transform.rotation = Quaternion.Euler(new Vector3(0, -45, 0));//y -= 45;//transform.rotation = Quaternion.Euler(new Vector3(0, y, 0));transform.Rotate(new Vector3(0, -45, 0));}// 向右旋转45度if (Input.GetKeyDown(KeyCode.E)){//transform.eulerAngles += new Vector3(0, 45, 0);//transform.rotation = Quaternion.Euler(new Vector3(0, 45, 0));//y += 45;//transform.rotation = Quaternion.Euler(new Vector3(0, y, 0));transform.Rotate(new Vector3(0, 45, 0));}

我们发现transform.Rotate使用起来就比较简单了。当我们Play当前工程之后,我们就发现效果和之前是一样的(可以连续的旋转,而不是只旋转一下)。但是,请大家明白的是,之前的旋转是相对于世界坐标系的Y轴,现在的旋转是相对于游戏对象本地坐标系的Y轴,之所以效果一样是,是因为两者坐标系重合了而已。

从Scene视图中我们可以看到,Cube对象坐标系和世界坐标系是一致的。接下来,我们调整Cube,让两个坐标系不一致,我们让Cube沿着Z轴顺时针旋转90度,也就是修改Cube的Inspector视图中的Rotation中的Z值为“-90”,效果如下所示:

 

为什么“-90”度是顺时针旋转呢?这个取决于我们的观察方向。在默认的左手坐标系下,负值就是顺时针旋转;当然右手坐标系下,正值是顺时针旋转。此时世界坐标系的Y轴仍然是向上的方向,而游戏对象Cube的Y轴是向右的。那么,此时如果我们让Cube在Y轴上按照两个不同坐标系进行旋转的话,那肯定是不一样了。为了能够看到这个效果,我们修改摄像机的位置参数,从侧面观察cube的旋转。

然后(保持相机选中状态)我们点击菜单栏“GameObject”->“Align View to Selected”

此时,我们的Scene视角与Game视角一致。如果是本地坐标系的话,Y轴是向里的。因此围绕它旋转的话,Cube应该是类似“车轮滚动”的方式进行旋转。

// 向左旋转45度
transform.Rotate(new Vector3(0, -45, 0));// 向右旋转45度
transform.Rotate(new Vector3(0, 45, 0));

然后我们Play工程,查看运行结果,Gif图如下

如果是世界坐标系的话,Y轴是向上的。如果它应该是“陀螺”旋转的方式。

//transform.Rotate(new Vector3(0, -45, 0));
transform.Rotate(new Vector3(0, -45, 0), Space.World);//transform.Rotate(new Vector3(0, 45, 0));
transform.Rotate(new Vector3(0, 45, 0),Space.World);

我们直接Play工程,查看Gif效果图吧

 

http://www.dinnco.com/news/15933.html

相关文章:

  • 国外购物网站大全外国搜索引擎登录入口
  • 与网站建设关系密切的知识点怎样做一个产品营销方案
  • 二维码生成器使用方法网站优化推广排名
  • 长春网站如何制作电商网站大全
  • 网站服务名词解释如何制作微信小程序
  • 网站建设和网页设计微信公众号怎么做文章推广
  • 怎么给网站添加黑名单百度推广代理查询
  • 网站建设常用的开发语言介绍输入关键词自动生成文章
  • 浏览器怎样屏蔽网站太原seo外包公司
  • 国外网络推广公司推广关键词优化
  • smush.it wordpressgoogle搜索排名优化
  • 公司网站网站模板源码
  • asp.net网站建设教程神马搜索seo优化排名
  • wordpress实现会员中心360优化大师下载
  • 外贸公司英文网站建设如何自己做一个网站
  • 党建设计图贵州seo学校
  • 网站怎么做才可以做评价yandex引擎搜索入口
  • 做二手手机交易网站石家庄seo网站管理
  • 180天做180个网站网站优化外包找谁
  • 泗洪做网站青岛关键词排名哪家好
  • 网站做网站郑州百度推广公司地址
  • 下载类网站做多久才有流量营销目标分为三个方面
  • 怎么看网站做的好不好好看的web网页
  • 做网站好的公司设计师网站
  • 维度网络专业做网站东莞seo建站
  • 提供网站建设备案公司北京seo排名外包
  • 网站构建的过程seo搜索引擎优化工具
  • 怎样做能直接上传微信的视频网站如何做网站推广
  • 广西最新一批违法领导seo网站推广是什么
  • 移动互联网站建设友情链接的作用大不大