Unity 之游戏物体的移动篇

首先需要说明的是,unity 实现游戏物体的移动,其本质是改变transform组件的position。那么下面我们就来看有哪些方法是可以直接或者间接的改变transform.position的。

  1. 直接通过Transform组件直接改变。

            需要说明的是:unity场景中任何一个游戏对象都会有一个Transform组件,是用来记录游戏对象的空间节点的状态,它包括位置(postion),旋转(rotate),缩放(scale)。这里我们所说的物体的移动,其实就是改变position的值。

1.1直接给position赋值,也就是说给position一个新的值,让游戏一运行,游戏对象的位置就会变为新给它的这个值。

//将游戏对象的位置改为三维空间中的(1,1,1)的点
transform.position = new Vector3(1, 1, 1);

1.2利用Transform类提供的Translate方法移动物体,这个方法是针对已知方向的移动的游戏对象。

//游戏对象绕z轴旋转
transform.Translate(transform.forward);

2.              使用Vector3类提供的方法

          Vector3既可以表示一个三维空间坐标系的点,也可以表示一个向量。

2.1Vector3.Lerp,Vector3.Slerp,Vector3.MoveTowards

这三个方法都是插值方法,Vector3.Lerp为线性插值,Vector3.Slerp为球形插值,Vector3.MoveTowards为线性插值,增加了最大速度的功能。当需要游戏对象从A点移动到B点就可以使用这些方法。

//对象从A点移动到B点
transform.position = Vector3.Lerp(A, B, time);
transform.position = Vector3.Slerp(A, B, time);
transform.position = Vector3.MoveTowards(A, B,maxdistancedelta);

2.2 Vector3.SmoothDamp()

这个方法是可以平滑的从点A逐渐移动到B点,还可以控制移动的速度,常用于相机的跟随。

3.         通过Rigidbody组件移动物体。

          Rigidbody组件是用于模拟物体的物理状态的,包括重力,摩擦力,速度等等。

3.1 Rigidbody.velocity

给刚体一个速度,能让物体运动,并且忽略静摩擦力,这能让物体很快的从静止状态运动起来。

//给游戏对象向正前方的一个速度
GetComponent<Rigidbody>().velocity = transform.forward;

3.2 Rigidbody.AddForce

给刚体一个方向的力,可以模拟物体在外力作用下物理状态的改变。

GetComponent<Rigidbody>().AddForce(transform.forward);

3.3  Rigidbody.MovePosition

刚体受到物理的约束,移动到指定的点

GetComponent<Rigidbody>().MovePosition(transform.position);

4.        CharacterController组件

CharacterController用于控制第一人称或第三人称角色的运动,使用这种方式可以模拟人的一些行为,比如限制角色爬坡的最大斜度,步伐的高度等。

4.1 CharacterController.SimpleMove

     用于模拟简单运动,并且自动应用重力,返回值表示角色当前是否着地。

4.2 CharacterController.Move

     模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。

上一篇:U3D控制摄像头第一人称WASD移动旋转


下一篇:Unity 鼠标旋转物体360展示