unity设备动作代码解析(1):传送带代码解析

勇哥注:

传送带代码比较简单,就是使用触发器移动对象。


image.png


传送带构建场景时可以使用两个Cube(立方体),子级的Cube做为刚体,父级的Cube做为碰撞触发器(这里用的是Box Collider碰撞触发器)。

image.png

image.png


要传送的那个Cube需要是个刚体,因此加了Rigidbody组件。

image.png



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)和这个方向的向量共同决定。




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-10-17 14:41:20 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年3月    »
12
3456789
10111213141516
17181920212223
24252627282930
31
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864