勇哥注:
传送带代码比较简单,就是使用触发器移动对象。
传送带构建场景时可以使用两个Cube(立方体),子级的Cube做为刚体,父级的Cube做为碰撞触发器(这里用的是Box Collider碰撞触发器)。
要传送的那个Cube需要是个刚体,因此加了Rigidbody组件。
Rigidbody组件和Box Collider碰撞触发器的详细说明见下面的文章:
Unity组件大全之 Physics物理 |(57)Box Collider:游戏碰撞解决方案
https://unityboy.blog.csdn.net/article/details/142464466
Unity组件大全之 Physics物理 |(53)Rigidbody 刚体:物理模拟的核心
https://unityboy.blog.csdn.net/article/details/142371918
下面的OnTriggerStay函数代码中,speed 是移动速度,feeIn是拉带开关,targetTag 保证只有指定标签的物体才可以移动。
代码:
public class ConveyorBelt : MonoBehaviour { public float speed = 0.1f; public bool feedIn = false; public string targetTag; Rigidbody rBody; private void Start() { rBody = GetComponent<Rigidbody>(); } private void OnTriggerStay(Collider other) { if (feedIn) { if(other.CompareTag(targetTag))other.transform.Translate(-transform.right * Time.deltaTime * speed); } } }
下面是详细解释:
if(other.CompareTag(targetTag)):这是一个条件判断语句。
other是一个游戏对象(GameObject)的引用,而CompareTag(targetTag)是一个方法,
用于检查other游戏对象是否有一个特定的标签(Tag)名为targetTag。
如果other确实有这个标签,那么条件判断为真(true),执行接下来的代码块;
否则,不执行。
other.transform.Translate(-transform.right * Time.deltaTime * speed);:这是当上述条件满足时执行的代码。
other.transform:获取other游戏对象的Transform组件,Transform组件包含了游戏对象的位置、旋转和缩放信息。
.Translate(...):这是一个方法,用于移动游戏对象。它接受一个向量(Vector)作为参数,表示移动的方向和距离。
-transform.right:这里使用当前游戏对象(即包含这段代码的游戏对象)的右方向向量(transform.right),
并在其前面加上负号(-),表示移动的方向是当前游戏对象右方向的相反方向。
* Time.deltaTime:Time.deltaTime表示上一帧到当前帧的时间间隔,乘以它可以使移动速度不依赖于帧率,保持平滑和一致。
* speed:speed是一个变量,表示移动的速度。
最终,移动的距离和方向由这个速度变量、时间间隔和当前游戏对象的右方向(或其相反方向)共同决定。
在Unity中,每个游戏对象(GameObject)都有一个Transform组件,该组件包含了游戏对象的位置(Position)、
旋转(Rotation)和缩放(Scale)信息。
其中,位置决定了游戏对象在3D空间中的坐标,旋转决定了游戏对象的朝向,而缩放则决定了游戏对象的大小。
当我们谈论“右方向向量(transform.right)”时,我们实际上是指的游戏对象在其当前朝向下的局部坐标系中的右方向。
这个向量是相对于游戏对象本身的,而不是世界坐标系或全局坐标系。
在Unity的3D空间中,每个游戏对象都有一个以其为中心、以其朝向为基准的局部坐标系。
在这个坐标系中:
前方向(Forward):通常指向游戏对象的正前方,由transform.forward表示。
后方向(Back):与前方向相反,即游戏对象的正后方。
右方向(Right):垂直于前方向,指向游戏对象的右侧,由transform.right表示。
左方向(Left):与右方向相反,即游戏对象的左侧。
上方向(Up):通常指向世界的上方(Y轴正方向),但在某些情况下(如游戏对象被旋转)可能与全局的上方向不同,由transform.up表示。
下方向(Down):与上方向相反,即世界的下方。
因此,当你看到-transform.right时,它表示的是当前游戏对象局部坐标系中的右方向的相反方向。
这个向量可以用于移动、旋转或定位其他游戏对象,以实现特定的游戏逻辑或视觉效果。
例如,在上面的代码中,-transform.right * Time.deltaTime * speed用于计算移动的方向和距离。
这里,移动的方向是当前游戏对象右方向的相反方向,移动的距离由速度(speed)、
时间间隔(Time.deltaTime)和这个方向的向量共同决定。

