提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

博主刚学习unity的时候,在网上找预制体相关的博客,可是很难找到一篇凝练且通俗易懂介绍预制体的文章,浪费了不少时间且难以理解一些文章的内容。自己摸索学习了一段时间过后,总算对预制体有了一定的了解,现在本篇文章将凝练的讲一讲unity中的预制体及其实例化。


提示:以下是本篇文章正文内容,下面案例可供参考

一、预制体(Prefab)是什么?

1.1预制体简介

大家平时点的外卖,其菜品很多就是通过预制菜制作的,预制菜的主要特点是规格统一且经过简单加工即可制成成品。我们可以把现实中的预制菜比作unity中的预制体,厨师加工预制菜的过程就是预制体实例化的过程,这里的厨师其实就是instantiate函数,通过函数将预制体实例化。厨师用预制菜制作出了一道成品菜,就是instantiate函数实例化了一个预制体,将该预制体呈现在场景中。

1.2预制体是什么样子的?

预制体可以有多种元素组合而成,所谓的元素一般是游戏素材,比如图片,模型等,将所有的元素打包成一个物体,这个物体就是所谓的预制体。
如图样例就是一个命名为【GameObject】的预制体,它包括了场景中出现的所有元素(房子,马路,树木,栅栏,草丛),函数实例化该预制体后,游戏场景中就会一齐出现房子马路等元素的一个集合。

在这里插入图片描述

1.3预制体作用与用途

在一个游戏项目中,场景可能就是由许多个预制体拼凑而成,每个预制体组成了场景中的一点部分元素,比如要制作一个无限大的地图,通常游戏就会设置当主视角接近场景边界的时候,就往外随机生成一个预制体场景,这样就能实现无限大地图的效果。预制体的使用就会大大方便对地图元素的管理。
如果你要制作一把游戏枪械,当枪械激发时你想做出一颗颗子弹出枪膛的效果,那么子弹也可以做成一种预制体,不断在枪口实例化,且实例化之后沿着枪口方向移动。

二、制作一个预制体

2.1制作预制体示例

在这里插入图片描述

我们首先将素材拖入场景界面,可以根据你对游戏场景的设计,摆出你希望的预制体的样子,你所设计的样子,就是以后预制体实例化的样子。

在这里插入图片描述在这里插入图片描述

然后我们创建一个空的物体,将我们所添加的元素全部并入到该空物体,成为其子项。

在这里插入图片描述在这里插入图片描述

最后,我们将【GameObject】拖入到Project的一个文件夹,至此,一个预制体就制作完成了。以后要使用该预制体的时候,我们就可以从Project中实例化该预制体。保存好之后就可以把场景【Hierarchy】里面的【GameObject】删去了,保存【Project】里面的源预制体即可,因为我们实例化调用的是项目里面的源预制体。

2.2预制体实例化

要实例化一个预制体,我们首先要代码获取到源预制体,然后在通过Instantiate函数将获得的源预制体实例化。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    //预制体是用GameObject类型
    public GameObject prefab; 
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们可以通过pubic来获取外部的源预制体,pubic可以在编辑器界面生成一个面板窗口,随后将源预制体拖放到【Test】脚本下的【Prefab】窗口。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject prefab;
    private void Start()
    {
        Instantiate(prefab);
    }
}

在这里插入图片描述

在脚本中加上Instantiate(prefab),保存代码返回编辑器中点击play运行,即可简单的将预制体实例化,生成刚刚所设计的场景在游戏中。


总结

本文只是简单的介绍了Instantiate函数的最简单用法,Instantiate函数还可以设置更多参数,比如初始化预制体的位置,旋转角度等,比如

      Instantiate(prefab, new Vector3(0,0,0), Quaternion.identity);
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐