创新项目实训学习笔记-Unity-1
前言
刚刚接触unity时,有一种耳目一新的感觉,这是一种可以实时看到效果,而且十分简单好上手的综合型游戏开发工具,也是一个专业的游戏引擎。通过鼠标简单的点选就可以创造出许多在开发工具中内置的简单的形状,为脚本中的变量赋值只许使用简单的点选即可实现,同时也可以随时切换2D的界面和3D的游戏场景进行编程,十分的简单明了。
Transform类
在刚刚开始学习unity时,接触最多的就是transform类了,通过控制组件的transform可以轻松的实现对于组件位置设定、移动、旋转等操作,下面我将简单的介绍一下比较常见的两个函数,分别是Translate、Rotate以及常见的成员变量position、rotation、right、up、forward
成员变量
- position
用于存储组件的当前位置
通过查看position.x,position.y,position.z可以分别获取组件当前的X/Y/Z坐标 - rotation
用于存储组件的当前旋转角度 - right
世界坐标系中的右方向,也就是x轴的正方向。 - up
世界坐标系中的上方向,也就是y轴的正方向。 - forward
世界坐标系中的前方向,也就是z轴的正方向。
函数
- Translate
该函数用于控制组件的移动
我们在场景中创建两个Cube,分别复制给下面代码中的两个GameObject,同时调用上面提到的translate方法对物体进行移动,不同的是,对于1号物体在移动时乘上了一个Time.deltaTime
public GameObject gameObject1;
public GameObject gameObject2;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
gameObject2.transform.Translate(new Vector3(1, 0, 0));
gameObject1.transform.Translate(new Vector3(1, 0, 0)*Time.deltaTime);
}
这里调用Translate,目的是让该物体向X方向以1的速度移动
运行脚本后可以发现,物体2明显比物体1移动快很多,这里不得不提到上面讲到的Time.deltaTime。我们知道,脚本中的Update函数是每帧调用一次,因此对于物体2而言,每一帧它都要向X方向移动1;而乘以Time.deltaTime后,将原先的每一帧向X方向移动1变成了实际时间的每1秒向X方向移动1,我们也可以理解为Time.deltaTime与1/每秒帧数等价,因此物体1比物体2要慢很多。
- Rotate
该函数用于使组件转动
我们还是以刚才的代码为例
public GameObject gameObject1;
public GameObject gameObject2;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
gameObject2.transform.Rotate(new Vector3(1, 0, 0));
gameObject1.transform.Rotate(new Vector3(1, 0, 0)*Time.deltaTime);
}
通过运行代码可以发现,物体1和物体2均绕着X轴顺时针转动,只是物体1以每秒1度的较慢的速度旋转,物体2以每帧1度的较快的速度旋转。