Unity C#脚本使用预制件创建游戏对象

2022年4月24日 3559点热度 3人点赞 0条评论

前言

脚本中可以通过预制件创建游戏对象,这样做法相比于直接在Hierarchy Window 中创建更加灵活。

如在游戏角色发射子弹时,这种情况需要游戏角色响应用户输入的同时创建子弹的游戏对象,如果不使用脚本我想不到能怎么去实现这样的需求。

预制件

之前博客中所用到的,在资源文件夹中创建的精灵,动画,游戏对象都是预制件。

也可以通过拖拽Hierarchy Window中的游戏对象到资源文件,这样也会自动生成一个预制件。

个人理解,预制件有点像是高级语言中类的概念,把预制件放到游戏游戏场景中就是实例化一个类对象。

用预制件在Hierarchy Window中创建的对象图标会是蓝色的,直接创建的对象是灰色的。

使用脚本创建游戏对象

public static Object Instantiate (Object original);
public static Object Instantiate (Object original, Transform parent);
public static Object Instantiate (Object original, Transform parent, bool instantiateInWorldSpace);
public static Object Instantiate (Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate (Object original, Vector3 position, Quaternion rotation, Transform parent);
original 要复制的现有对象。
position 新对象的位置。
rotation 新对象的方向。
parent 将指定给新对象的父对象。
instantiateInWorldSpace 当你分配一个父对象时,传递true来直接在世界坐标系中定位新对象。传递false来设置对象相对于它的新父对象的位置。

使用这个函数,就可以在场景中创建新的游戏对象,与其说是创建,不如说是复制,因为所有的函数声明中都需要传入一个源游戏对象。

所以一般使用的时候会这样使用:

    public GameObject obj;
    ....
    GameObject newObj = Instantiate(obj, transform.position, Quaternion.identity);

创建一个public成员作为源对象,然后在使用脚本时可以在Inspector Window中设置源对象的对象类型,做法是讲源对象的预制件拖拽到Inspector Window。其实也就是使用预制件创建了一个对象,然后把这个对象用于初始化 obj成员(如果对这部分操作感到迷惑,可以去看以下之前的博文:[C#脚本的简单使用方法]())。

这一切准备好之后就脚本就能顺利的创建对象了。

关于这里传入的参数,transform.position 是当前游戏对象的位置,Quaternion.identity 与Quaternion(0,0,0,0)是等价,表示不做旋转操作。

   public GameObject obj;
   void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject bulletInstance = Instantiate(Bullet, transform.position, Quaternion.identity);
        }
    }

如果将代码改成这样,那么在用户按下空格键的时候会在当前游戏对象的位置复制一个obj 对象。

大脸猫

这个人虽然很勤快,但什么也没有留下!

文章评论