欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity 之游戏物体的移动篇

程序员文章站 2024-03-16 23:18:46
...

首先需要说明的是,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

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

相关标签: unity 物体移动