少有人走的路

勇哥的工业自动化技术网站

unity设备动作代码解析(2):上料代码解析

勇哥注:

上料是指自动供料机构,例如震动盘,感应到就供一个料。

其实就是通过触发器复制一个对象实例。



image.png

(图1)


代码:

public class ProductFeeder : MonoBehaviour
{
    public GameObject product;

    bool available=true;

    private void Start()
    {
        Produce();
    }

    private void OnTriggerExit(Collider other)
    {
        Produce();
    }


    void Produce()
    {
        if (available)
        {
            var temp = Instantiate(product, transform);
        }
    }
}


Instantiate 是Unity中的一个内置方法,用于创建(或称为“实例化”)一个新的游戏对象。

这个方法可以复制任何已经存在于场景中的游戏对象,或者复制任何通过脚本动态创建的游戏对象。


product 参数:

product 是 Instantiate 方法的第一个参数,它代表了一个游戏对象(GameObject)或者一个预制件(Prefab)的引用。

如果 product 是一个预制件,那么 Instantiate 方法会创建一个该预制件的新实例。

如果 product 是一个已经存在于场景中的游戏对象,那么 Instantiate 方法会复制这个对象。


transform 参数:

transform 是 Instantiate 方法的第二个参数,它代表了一个Transform类型的值,用于指定新实例化的游戏对象应该被放置在世界空间中的哪个位置。


这里为啥transform没有定义却可以直接使用呢?

在Unity的C#脚本中,transform 通常是一个预定义的属性,它属于每个GameObject类的一个实例。

这意味着,当你在Unity的脚本中编写代码时,如果你正在编写的是一个继承自MonoBehaviour的类的成员方法,

并且这个方法属于一个附加到某个游戏对象上的脚本,那么你可以直接访问transform属性,而无需事先定义它。



代码是很简单,但是实际操作的时候,发现一个问题。

就是复制出来的对象为啥不是原对象的大小?比例也不对呢?

如图1所示,复制出来的罐子比例是不对的。

image.png 

正常尺寸应该是下面这样的:

image.png



其实,主要是那个Cube的Transform的缩放大小要一致,下图中都是0.1,这样罐子就等比例了。

但是其大小跟随Cube变化。

image.png

image.png


当触发器框碰到了start()函数复制的那个罐子后,就开闸放水般疯狂复制了。

这个复制的速度当然就是等于你帧速度。

image.png



发表评论:

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

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864