Unity 之游戏物体的移动篇
首先需要说明的是,unity 实现游戏物体的移动,其本质是改变transform组件的position。那么下面我们就来看有哪些方法是可以直接或者间接的改变transform.position的。
-
直接通过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
用于模拟简单运动,并且自动应用重力,返回值表示角色当前是否着地。
模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。
推荐阅读
-
Unity3D开发之获取物体的尺寸
-
Unity 之游戏物体的移动篇
-
Unity游戏制作中关于子弹碰撞到游戏物体后子弹会以一定的角度进行返回
-
Unity开发2D游戏之游戏背景的移动
-
用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动
-
Unity 基础 之 实现简单的Android移动端本地数据读取与写入封装(简单加密写入,解密读取 json 数据)
-
Unity中制作VR游戏焦点触发特定的游戏物体
-
Unity实战之FlyPin(见缝插针)小游戏的实现
-
HTML5游戏开发进阶篇之单位智能移动实现教程
-
Unity/C#基础复习(5) 之 浅析观察者、中介者模式在游戏中的应用与delegate原理